📄 matvectorrect4.fp
字号:
!!FP1.0
#Date:2003/10/23
#try to compute General Matrix - Vector Multiplication Just For TEXRECT
#So this fragment program is shorter than TEX2D
#this one is for 4 channels computations
# Vector X ----TEX0
# Vector result ----TEX1
# Matrix Ai ----TEX2(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};
DEFINE Channels = {0,1,2,3};
#Find the correct texel pos in tex0---X
#Tex0.y*Width + Tex0.x + i
FLR R1, f[TEX0];
MAD R0.xyzw, R1.yyyy, TexPARA.xxxx, R1.xxxx;
MOV R2, {4,4,4,4};
MAD R0, R0, R2, Channels;
#if R0.x = Tex0.y*Width + Tex0.x >= DimensionS, then kill this fragment
SUBC R1.x, R0.w, TexPARA.z;
KIL GE.x;
ADD R0, R0, PassNo.xxxx;
#
MUL R1, R0, {0.25,0.25,0.25,0.25};
FLR R1, R1;
MUL R2, R1, {4,4,4,4};
SUB R3, R0, R2;
#R1---TO DETERMINE (i,j) of current texel
#R3---to find the corrent RGBA
#Integer m = a/Width --->R6
#Integer n = a%Width --->R7
MUL R6, R0, TexPARA.yyyy;
FLR R6, R6;
MUL R7, R6, TexPARA.xxxx;
SUB R7, R0, R7;
###########R
MOV R4.x, R7.x;
MOV R4.y, R6.x;
TEX R0, R4, TEX0, RECT;
#Find the RGBA component
MOVR R1.x, {0}.x;
SEQR H0.x, R3.x, R1.x;
ADDX H0.y, -H0.x, {1}.x;
ADDX H0.x, -H0.x, {1}.x;
MOVR R1.x, {1}.x;
SEQR H0.z, R3.x, R1.x;
MULX H0.y, H0.y, H0.z;
ADDX H0.z, -H0.z, {1}.x;
MULX H0.z, H0.x, H0.z;
MOVR R5.x, R0.x;
MOVXC HC.x, H0.y;
MOVR R5.x(GT.x), R0.y;
MOVR R1.x, {2}.x;
SEQR H0.x, R3.x, R1.x;
MULX H0.y, H0.z, H0.x;
MOVXC HC.x, H0.y;
ADDX H0.x, -H0.x, {1}.x;
MULX H0.x, H0.z, H0.x;
MOVR R5.x(GT.x), R0.z;
MOVXC HC.x, H0.x;
MOVR R5.x(GT.x), R0.w;
###########G
MOV R4.x, R7.y;
MOV R4.y, R6.y;
TEX R0, R4, TEX0, RECT;
#Find the RGBA component
MOVR R1.x, {0}.x;
SEQR H0.x, R3.y, R1.x;
ADDX H0.y, -H0.x, {1}.x;
ADDX H0.x, -H0.x, {1}.x;
MOVR R1.x, {1}.x;
SEQR H0.z, R3.y, R1.x;
MULX H0.y, H0.y, H0.z;
ADDX H0.z, -H0.z, {1}.x;
MULX H0.z, H0.x, H0.z;
MOVR R5.y, R0.x;
MOVXC HC.x, H0.y;
MOVR R5.y(GT.x), R0.y;
MOVR R1.x, {2}.x;
SEQR H0.x, R3.y, R1.x;
MULX H0.y, H0.z, H0.x;
MOVXC HC.x, H0.y;
ADDX H0.x, -H0.x, {1}.x;
MULX H0.x, H0.z, H0.x;
MOVR R5.y(GT.x), R0.z;
MOVXC HC.x, H0.x;
MOVR R5.y(GT.x), R0.w;
###########B
MOV R4.x, R7.z;
MOV R4.y, R6.z;
TEX R0, R4, TEX0, RECT;
#Find the RGBA component
MOVR R1.x, {0}.x;
SEQR H0.x, R3.z, R1.x;
ADDX H0.y, -H0.x, {1}.x;
ADDX H0.x, -H0.x, {1}.x;
MOVR R1.x, {1}.x;
SEQR H0.z, R3.z, R1.x;
MULX H0.y, H0.y, H0.z;
ADDX H0.z, -H0.z, {1}.x;
MULX H0.z, H0.x, H0.z;
MOVR R5.y, R0.x;
MOVXC HC.x, H0.y;
MOVR R5.z(GT.x), R0.y;
MOVR R1.x, {2}.x;
SEQR H0.x, R3.z, R1.x;
MULX H0.y, H0.z, H0.x;
MOVXC HC.x, H0.y;
ADDX H0.x, -H0.x, {1}.x;
MULX H0.x, H0.z, H0.x;
MOVR R5.z(GT.x), R0.z;
MOVXC HC.x, H0.x;
MOVR R5.z(GT.x), R0.w;
###########A
MOV R4.x, R7.w;
MOV R4.y, R6.w;
TEX R0, R4, TEX0, RECT;
#Find the RGBA component
MOVR R1.x, {0}.x;
SEQR H0.x, R3.w, R1.x;
ADDX H0.y, -H0.x, {1}.x;
ADDX H0.x, -H0.x, {1}.x;
MOVR R1.x, {1}.x;
SEQR H0.z, R3.w, R1.x;
MULX H0.y, H0.y, H0.z;
ADDX H0.z, -H0.z, {1}.x;
MULX H0.z, H0.x, H0.z;
MOVR R5.y, R0.x;
MOVXC HC.x, H0.y;
MOVR R5.w(GT.x), R0.y;
MOVR R1.x, {2}.x;
SEQR H0.x, R3.w, R1.x;
MULX H0.y, H0.z, H0.x;
MOVXC HC.x, H0.y;
ADDX H0.x, -H0.x, {1}.x;
MULX H0.x, H0.z, H0.x;
MOVR R5.w(GT.x), R0.z;
MOVXC HC.x, H0.x;
MOVR R5.w(GT.x), R0.w;
#Fetch Current Texture Position
TEX R1, f[TEX0], TEX2, RECT;
TEX R2, f[TEX0], TEX1, RECT;
#Multiply these two elements
MAD o[COLR], R5, R1, R2;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -