📄 matvectorrectmultimultitex2.fp
字号:
!!FP1.0
#Date:2004/1/6
#try to compute General Matrix - Vector Multiplication Just For TEXRECT
#So this fragment program is shorter than TEX2D
# Vector X ----TEX0
# Vector result ----TEX1
# Matrix Ai ----TEX2(Diagonal Data)
# Matrix Ai+1 ----TEX3(Diagonal Data)
#TexPARA.X = Width;
#TexPARA.Y = 1.0/Width;
#TexPARA.Z = DimensionS;
#TexPARA.W = 1.0/DimensionS;
DECLARE TexPARA ={0, 0, 0, 0};
#PassNo = I
DECLARE PassNo ={0, 0, 0, 0};
#Find the correct texel pos in tex0---X
# i*Width + j
FLR R1, f[TEX0];
MAD R0.x, R1.y, TexPARA.x, R1.x;
#if R0.x = Tex0.y*Width + Tex0.x >= DimensionS, then kill this fragment
SUBC R1.x, R0.x, TexPARA.z;
KIL GE.x;
#Fetch previous result from TEX1
TEX R2, f[TEX0], TEX1, RECT;
#---------------------------------------------------------------------
#Total Parts Number = 2
#Part 0---------------------------Each part consist of 11*4+1=45
#with 4 subparts
#fetch Current Ai,Ai+1,Ai+2,Ai+3 from TEX2
TEX R3, f[TEX0], TEX2, RECT;
#--------------------------------------------------
#subpart0---------------Each subpart consists of 11
# the actual position in Vector X = i*Width + j + I
ADD R0.x, R0.x, PassNo.x;
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.x, R2;
#--------------------------------------------------
#subpart1
# the actual position in Vector X = i*Width + j + I + 1
ADD R0.x, R0.x, {1};
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.y, R5;
#--------------------------------------------------
#subpart2
# the actual position in Vector X = i*Width + j + I + 2
ADD R0.x, R0.x, {1};
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.z, R5;
#--------------------------------------------------
#subpart3
# the actual position in Vector X = i*Width + j + I + 3
ADD R0.x, R0.x, {1};
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.w, R5;
#---------------------------------------------------------------------
#Total Parts Number = 2
#Part 1---------------------------Each part consist of 11*4+1=45
#with 4 subparts
#fetch Current Ai,Ai+1,Ai+2,Ai+3 from TEX3
TEX R3, f[TEX0], TEX3, RECT;
#--------------------------------------------------
#subpart0---------------Each subpart consists of 11
# the actual position in Vector X = i*Width + j + I
ADD R0.x, R0.x, {1};
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.x, R5;
#--------------------------------------------------
#subpart1
# the actual position in Vector X = i*Width + j + I + 1
ADD R0.x, R0.x, {1};
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.y, R5;
#--------------------------------------------------
#subpart2
# the actual position in Vector X = i*Width + j + I + 2
ADD R0.x, R0.x, {1};
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.z, R5;
#--------------------------------------------------
#subpart3
# the actual position in Vector X = i*Width + j + I + 3
ADD R0.x, R0.x, {1};
# a = (Tex0.y*Width + Tex0.x + i)%DimensionS -->R6.x
MUL R1.x, R0.x, TexPARA.w;
FLR R1.x, R1.x;
MUL R1.x, R1.x, TexPARA.z;
SUB R6.x, R0.x, R1.x;
#Integer m = a/Width --->R1.y
#Integer n = a%Width --->R1.x
MUL R1.y, R6.x, TexPARA.y;
FLR R1.y, R1.y;
MUL R1.x, R1.y, TexPARA.x;
SUB R1.x, R6.x, R1.x;
#Fetch x from Current Texture Position
TEX R4, R1, TEX0, RECT;
#Multiply Ai*x
MAD R5, R4, R3.w, R5;
#-------------------------------------------------------------------
#Final Step
#Multiply these two elements
MOV o[COLR], R5;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -