📄 sdmatvectorrect.fp
字号:
!!FP1.0
#Date:2003/12/31
#try to compute Brook sparse Matrix - Vector Multiplication Just For TEXRECT
# Vector X ----TEX0
# Element ----TEX1 -- _iDataTexID // record the non zero elements
# Position ----TEX2 -- _iPosTexID; // record the accordingly position(Column J)of each non zero element
# StartPos ----TEX3 -- _iStartTexID;// record the first non zero element's position(Column J) of each row
# Length ----TEX4 -- _iLenTexID; // record the length of each row which sum non zero
# Previous ====TEX5 //////record the previous result
#TexPARA.X = PassID;
#TexPARA.Y = Data Texture Width;
#TexPARA.Z = Index Texture Width;
#TexPARA.W = 1.0/TexPARA.Y;
DECLARE TexPARA = {0,0,0,0};
# Length texture-R1
TEX R1, f[WPOS], TEX4, RECT;
#if pass - len >= 0, then kill the current fragment, just return result = prev
#SUBC R1.x, TexPARA.x, R1.x;
#KIL GE.x;
# THE ABOVE METHOD changed to the following,
# if pass >= len, R4=0
# else R4 = 1;
SLT R4.x, TexPARA.x, R1.x;
# Start texture-R0
TEX R0, f[WPOS], TEX3, RECT;
# R0 ---- offset = start + pass
ADD R0, R0, TexPARA.xxxx;
#else result = prev + elem[offset]*v[ipos[offset]];
# compute R1(x,y) of DataTexture by offset-R0
MUL R1.y, R0.x, TexPARA.w;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.y;
SUB R1.x, R0.x, R1.x;
FLR R1.x, R1.x;
# R1 ---- (x,y) of DataTex
# R2 <==== elem[offset]
TEX R2, R1, TEX1, RECT;
# R3 <===== ipos[offset];
TEX R3, R1, TEX2, RECT;
# fetch Vector X from Tex0
TEX R3, R3, TEX0, RECT;
# fetch previous result
TEX R0, f[WPOS], TEX5, RECT;
#SET ACCORDING TO CONDITION
MUL R2, R2, R3;
MUL R2, R2, R4.xxxx;
ADD o[COLR], R2, R0;
#MAD o[COLR], R2, R3, R0;
END
#Instructions Number = 15;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -