xvs.1.1 ; Shader for a three bone matrix palette system with up to 60 bones ; lit by a single directional light and ambient color ; Data is in two streams. One for position, normal, and texture. The other for indices and weights ; Uses all 190 constant registers. Matrix indices are tweaked to avoid -37 and -38 ; ; v0 = position ; v1 = normals ; v2 = texture coords ; v3 = matrix indices ; v4 = weights ; ; c92-c96 = world*view*projection matrix ; ; c-96+ = bone matrices ; #define SHADER_ZERO_REGISTER 83 #define SHADER_LIGHTDIR1_REGISTER 84 #define SHADER_LIGHTCOL1_REGISTER 85 #define SHADER_LIGHTDIR2_REGISTER 86 #define SHADER_LIGHTCOL2_REGISTER 87 #define SHADER_LIGHTDIR3_REGISTER 88 #define SHADER_LIGHTCOL3_REGISTER 89 #define SHADER_AMBIENTLIGHT_REGISTER 90 #define SHADER_MATERIAL_REGISTER 91 #define SHADER_TRANSFORM_REGISTER 92 ; First bone mov a0.x, v3.x mul r2, v4.x, c[a0.x+0] mul r3, v4.x, c[a0.x+1] mul r4, v4.x, c[a0.x+2] ; Second bone mov a0.x, v3.y mad r2, v4.y, c[a0.x+0], r2 mad r3, v4.y, c[a0.x+1], r3 mad r4, v4.y, c[a0.x+2], r4 ; Third bone mov a0.x, v3.z mad r2, v4.z, c[a0.x+0], r2 mad r3, v4.z, c[a0.x+1], r3 mad r4, v4.z, c[a0.x+2], r4 ; Transform weighted position dp4 r5.x, v0, r2 dp4 r5.y, v0, r3 dp4 r5.z, v0, r4 ; Rotate weighted normal dp3 r6.x, v1, r2 dp3 r6.y, v1, r3 dp3 r6.z, v1, r4 ; Normalize normal? dp3 r7, r6, c[SHADER_LIGHTDIR1_REGISTER] ; Diffuse Light 1 max r7, r7, c[SHADER_ZERO_REGISTER].x mul r10, r7, c[SHADER_LIGHTCOL1_REGISTER] dp3 r8, r6, c[SHADER_LIGHTDIR2_REGISTER] ; Diffuse Light 2 max r8, r8, c[SHADER_ZERO_REGISTER].x mad r10, r8, c[SHADER_LIGHTCOL2_REGISTER], r10 dp3 r9, r6, c[SHADER_LIGHTDIR3_REGISTER] ; Diffuse Light 3 max r9, r9, c[SHADER_ZERO_REGISTER].x mad r10, r9, c[SHADER_LIGHTCOL3_REGISTER], r10 add r8, r10, c[SHADER_AMBIENTLIGHT_REGISTER] ; add ambient term min r8, r8, c[SHADER_ZERO_REGISTER].y mul oD0.rgb, r8, c[SHADER_MATERIAL_REGISTER] mov oD0.w, c[SHADER_AMBIENTLIGHT_REGISTER].w ; World, view, projection dph oPos.x, r5, c[92] dph oPos.y, r5, c[93] dph oPos.z, r5, c[94] dph oPos.w, r5, c[95] ; Texture coordinates mov oT0, v2