I have a problem, this shader does not work and i dont know why. It compute per-pixel lighting for 3 lights with 8 texture units. Is there any mistake?
// result = (N.L1*A1 + N.L2*A2 + N.L3*A3 + Color) * Diffuse
// (Lx = cube map with light vectors, Ax = attentuation map)
// 1. PASS
glSampleMapATI(GL_REG_0_ATI, GL_TEXTURE0, GL_SWIZZLE_STR_ATI); // N
glSampleMapATI(GL_REG_1_ATI, GL_TEXTURE1, GL_SWIZZLE_STR_ATI); // L1
glSampleMapATI(GL_REG_2_ATI, GL_TEXTURE2, GL_SWIZZLE_STR_ATI); // A1
glSampleMapATI(GL_REG_3_ATI, GL_TEXTURE3, GL_SWIZZLE_STR_ATI); // L2
glSampleMapATI(GL_REG_4_ATI, GL_TEXTURE4, GL_SWIZZLE_STR_ATI); // A2
// R1 = N.L1 * A1
glColorFragmentOp2ATI(GL_DOT3_ATI, GL_REG_1_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);
glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_1_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_2_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);
// R3 = N.L2 * A2
glColorFragmentOp2ATI(GL_DOT3_ATI, GL_REG_3_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_3_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);
glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_3_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_3_ATI, GL_NONE, GL_NONE,
GL_REG_4_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);
// R1 = R1 + R3
glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_1_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_3_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);
// 2. PASS
glSampleMapATI(GL_REG_1_ATI, GL_REG_1_ATI, GL_SWIZZLE_STR_ATI); // N.L1*A1 + N.L2*A2
glSampleMapATI(GL_REG_2_ATI, GL_TEXTURE5, GL_SWIZZLE_STR_ATI); // L3
glSampleMapATI(GL_REG_3_ATI, GL_TEXTURE6, GL_SWIZZLE_STR_ATI); // A3
glSampleMapATI(GL_REG_4_ATI, GL_TEXTURE7, GL_SWIZZLE_STR_ATI); // Diffuse
// R2 = N.L3 * A3
glColorFragmentOp2ATI(GL_DOT3_ATI, GL_REG_2_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_2_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);
glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_2_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_2_ATI, GL_NONE, GL_NONE,
GL_REG_3_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);
// R0 = R1 + R2
glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_2_ATI, GL_NONE, GL_NONE);
// R0 = R0 + Color
glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_NONE,
GL_PRIMARY_COLOR, GL_NONE, GL_NONE);
// R0 = R0 * Diffuse
glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_NONE,
GL_REG_4_ATI, GL_NONE, GL_BIAS_BIT_ATI|GL_2X_BIT_ATI);