Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Skinned Model Shader
- ; Constants
- .constf zeros(0, 0, 0, 0)
- .constf ones(1, 1, 1, 1)
- .constf offset(4, 4, 4, 4)
- ; Inputs
- .alias inpos v0
- .alias innrm v1
- .alias inclr v2
- .alias inuv v3
- .alias inbid v4
- .alias inbwt v5
- ; Outputs
- .out outpos position
- .out outclr color
- .out outuv texcoord0
- ; Uniforms
- .fvec projectionMatrix[4]
- .fvec viewMatrix[4]
- .fvec modelMatrix[4]
- .fvec boneMatrices[64]
- ; Main Function
- .proc main
- ; Multiply the inbid by 4 to generate the correct offsets.
- mul r0, offset, inbid
- ; Calculate the first transformed position.
- mova a0.x, r0.x
- dp4 r1.x, boneMatrices[a0.x], inpos
- dp4 r1.y, boneMatrices[a0.x + 1], inpos
- dp4 r1.z, boneMatrices[a0.x + 2], inpos
- dp4 r1.w, boneMatrices[a0.x + 3], inpos
- ; Calculate the second transformed position.
- mova a0.x, r0.y
- dp4 r2.x, boneMatrices[a0.x], inpos
- dp4 r2.y, boneMatrices[a0.x + 1], inpos
- dp4 r2.z, boneMatrices[a0.x + 2], inpos
- dp4 r2.w, boneMatrices[a0.x + 3], inpos
- ; Calculate the third transformed position.
- mova a0.x, r0.z
- dp4 r3.x, boneMatrices[a0.x], inpos
- dp4 r3.y, boneMatrices[a0.x + 1], inpos
- dp4 r3.z, boneMatrices[a0.x + 2], inpos
- dp4 r3.w, boneMatrices[a0.x + 3], inpos
- ; Multiply each register by the corresponding weight.
- mul r1, r1, inbwt.xxxx
- mul r2, r2, inbwt.yyyy
- mul r3, r3, inbwt.zzzz
- ; Add the transformed positions together to get the final model-space position of the vertex.
- add r4, zeros, r1
- add r4, r4, r2
- add r4, r4, r3
- ; modelMatrix * inpos
- dp4 r5.x, modelMatrix[0], r1
- dp4 r5.y, modelMatrix[1], r1
- dp4 r5.z, modelMatrix[2], r1
- dp4 r5.w, modelMatrix[3], r1
- ; viewMatrix * modelMatrix * inpos
- dp4 r6.x, viewMatrix[0], r5
- dp4 r6.y, viewMatrix[1], r5
- dp4 r6.z, viewMatrix[2], r5
- dp4 r6.w, viewMatrix[3], r5
- ; projectionMatrix * viewMatrix * modelMatrix * inpos
- dp4 outpos.x, projectionMatrix[0], r6
- dp4 outpos.y, projectionMatrix[1], r6
- dp4 outpos.z, projectionMatrix[2], r6
- dp4 outpos.w, projectionMatrix[3], r6
- ; outclr = inclr
- mov outclr, inclr
- ; outuv = inuv
- mov outuv, inuv
- ; Function termination
- end
- .end
Advertisement
Add Comment
Please, Sign In to add comment