📄 semilagranianfluiddiffuse.fp
字号:
!!FP1.0
#Date:2003/12/31
#try to compute Brook sparse Matrix - Vector Multiplication Just For TEXRECT
# Vector X ----TEX0
# Previous ====TEX1 //////record the previous result
# Element & Position ----TEX2 -- _iDataTexID // record the non zero elements
# // record the accordingly position(Column J)of each non zero element
# Tex2.x = elem;
# Tex2.y = ipos.x
# Tex2.z = ipos.z
# StartPos & Length ----TEX3 -- _iStartTexID;// record the first non zero element's position(Column J) of each row
# // record the length of each row which sum non zero
# Tex3.x = len
# Tex3.y = start
#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 & Starttexture - R0
TEX R0, f[WPOS], TEX3, RECT;
#if pass - len >= 0, then kill the current fragment, just return result = prev
#SUBC R1.x, TexPARA.x, R0.x;
#KIL GE.x;
# THE ABOVE METHOD changed to the following,
# if pass >= len, R4=0
# else R4 = 1;
SLT R4.x, TexPARA.x, R0.x;
# R0.y ---- offset = start + pass
ADD R0.y, R0.y, TexPARA.x;
#else result = prev + elem[offset]*v[ipos[offset]];
# compute R1(x,y) of DataTexture by offset-R0
MUL R1.y, R0.y, TexPARA.w;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.y;
SUB R1.x, R0.y, R1.x;
FLR R1.x, R1.x;
# R1 ---- (x,y) of DataTex in Tex2
# R2 <==== elem[offset] & ipos[offset]
TEX R2, R1, TEX2, RECT;
# fetch Vector X from Tex0(u,v,ro----RGB 3 channels)
TEX R3, R2.yzww, TEX0, RECT;
# fetch previous result(u,v,ro----RGB 3 channels)
TEX R0, f[WPOS], TEX1, RECT;
# A[i][j]*x[j]
MUL R2, R2.xxxx, R3;
#SET ACCORDING TO CONDITION
MUL R2, R2, R4.xxxx;
ADD o[COLR], R2, R0;
END
#Instructions Number = 13;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -