!!VP1.0 # # score.vp -- three symbol blosum62 matching on a gpu # seth hardy (shardy@aculei.net) # # so technically i'm under NDA not to release this, but then again, i never # got paid for it either. not that it's worth anything anymore, but it just # might have been when i wrote it. oh well, such is life. # # this is a nvidia asm program for vertex shaders, written by hand, back from # the day when the Cg spec had just been released and the compiler didn't work # at all. # # the purpose of this program is to do three-symbol pattern matching for # amino acids using the BLOSUM62 matrix. the matrix is loaded in via your # opengl program, the xyz coordinates and rgb colors of the vertex to be shaded # correspond to the two strings. the output vertex is shaded red with an # intensity equal to the match value. # # and for anyone who is interested, here's the definition of the blosum62 # matrix: # # const float blosum62[] = { # 4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, # 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, # 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, # 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, # 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, # 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, # 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, # 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, # 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, # 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, # 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, # 5, -2, -3, -1, 0, -1, -3, -2, -2, # 5, 0, -2, -1, -1, -1, -1, 1, # 6, -4, -2, -2, 1, 3, -1, # 7, -1, -1, -4, -3, -2, # 4, 1, -3, -2, -2, # 5, -2, -2, 0, # 11, 2, -3, # 7, -1, # 4}; # mov r0.x, c[48].x; add r1.x, c[48].z, -v[0].x; add r1.y, c[48].w, -v[0].x; mul r1.x, r1.x, r1.y; rcp r1.y, c[49].x; mad r1.x, r1.x, r1.y, v[1].x; add r1.x, r1.x, -v[0].x; add r0,y, c[48].y, -r1.x; exp r2, r1.x; add r2, r1.x, -r2.y; add r3, r1.x, -r2.x; add r4, r3.x, -c[49].y; slt r5, r1.x, c[48].x; mul r6, r5.x, r3.x; add r3, r3.x, -r6.x; mad r3.x, r5.x, r4.x, r2.x; add r4, r2.x, r1.z; mul r6, r5.x, r2.x; add r2, r2.x, -r6.x; mad r3.y, r5.x, r4.x, r2.x; mul r3.y, r3.y, c[49].w; add r3.z, r0.x, c[r3.x].w; sge r0.x, r3.y, c[49].z, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].z; sge r0.x, r3.y, c[49].x, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].x; sge r0.x, r3.y, c[49].y, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].y; sge r0.x, r3.y, c[48].x, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r1.x, c[48].z, -v[0].y; add r1.y, c[48].w, -v[0].y; mul r1.x, r1.x, r1.y; rcp r1.y, c[49].x; mad r1.x, r1.x, r1.y, v[1].y; add r1.x, r1.x, -v[0].y; add r0,y, c[48].y, -r1.x; exp r2, r1.x; add r2, r1.x, -r2.y; add r3, r1.x, -r2.x; add r4, r3.x, -c[49].y; slt r5, r1.x, c[48].x; mul r6, r5.x, r3.x; add r3, r3.x, -r6.x; mad r3.x, r5.x, r4.x, r2.x; add r4, r2.x, r1.z; mul r6, r5.x, r2.x; add r2, r2.x, -r6.x; mad r3.y, r5.x, r4.x, r2.x; mul r3.y, r3.y, c[49].w; add r3.z, r0.x, c[r3.x].w; sge r0.x, r3.y, c[49].z, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].z; sge r0.x, r3.y, c[49].x, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].x; sge r0.x, r3.y, c[49].y, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].y; sge r0.x, r3.y, c[48].x, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r1.x, c[48].z, -v[0].z; add r1.y, c[48].w, -v[0].z; mul r1.x, r1.x, r1.y; rcp r1.y, c[49].x; mad r1.x, r1.x, r1.y, v[1].z; add r1.x, r1.x, -v[0].z; add r0,y, c[48].y, -r1.x; exp r2, r1.x; add r2, r1.x, -r2.y; add r3, r1.x, -r2.x; add r4, r3.x, -c[49].y; slt r5, r1.x, c[48].x; mul r6, r5.x, r3.x; add r3, r3.x, -r6.x; mad r3.x, r5.x, r4.x, r2.x; add r4, r2.x, r1.z; mul r6, r5.x, r2.x; add r2, r2.x, -r6.x; mad r3.y, r5.x, r4.x, r2.x; mul r3.y, r3.y, c[49].w; add r3.z, r0.x, c[r3.x].w; sge r0.x, r3.y, c[49].z, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].z; sge r0.x, r3.y, c[49].x, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].x; sge r0.x, r3.y, c[49].y, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; add r3.z, r0.x, c[r3.x].y; sge r0.x, r3.y, c[48].x, r3.z; mov r3.y, r3.w; add r3.w, r3.z, -c[49].y; mad r0.x, r0.x, r3.w, r0.x; mov o[pos], v0; mov o[col0].x, r0.x; mov o[col0].yzw, c[48].x; END