/programs/demos/3DS/DATA.INC |
---|
271,7 → 271,7 |
if Ext=SSE2 |
db ' (SSE2)' |
end if |
db ' 0.060',0 |
db ' 0.059',0 |
labellen: |
STRdata db '-1 ' |
/programs/demos/3DS/VIEW3DS.ASM |
---|
1,5 → 1,5 |
; application : View3ds ver. 0.060 - tiny .3ds files viewer. |
; application : View3ds ver. 0.059 - tiny .3ds files viewer. |
; compiler : FASM |
; system : KolibriOS |
; author : Macgub aka Maciej Guba |
/programs/demos/3DS/BUMP_CAT.INC |
---|
81,10 → 81,10 |
.cz2 equ [ebp-108] |
.cbx1 equ dword[ebp-112] |
.cby1 equ [ebp-116] |
.cex1 equ dword[ebp-120] |
.cey1 equ [ebp-124] |
.cbx2 equ dword[ebp-128] |
.cby2 equ [ebp-132] |
.cbx2 equ dword[ebp-120] |
.cby2 equ [ebp-124] |
.cex1 equ dword[ebp-128] |
.cey1 equ [ebp-132] |
.cex2 equ dword[ebp-136] |
.cey2 equ [ebp-140] |
533,25 → 533,8 |
jge .loop12_done |
.loop12: |
call .call_bump_line |
if Ext >= SSE2 |
movups xmm0,.cey2 |
movups xmm1,.cey1 |
movups xmm2,.dey12 |
movups xmm3,.dey13 |
paddd xmm0,xmm2 |
paddd xmm1,xmm3 |
movups .cey2,xmm0 |
movups .cey1,xmm1 |
movq mm4,.cz1 |
movq mm5,.cz2 |
paddd mm4,.dz13 |
paddd mm5,.dz12 |
movq .cz1,mm4 |
movq .cz2,mm5 |
end if |
if (Ext = MMX) | (Ext = SSE) |
if Ext >= MMX |
movq mm0,.cby2 |
movq mm1,.cby1 |
movq mm2,.cey2 |
570,7 → 553,7 |
movq .cey2,mm2 |
movq .cz1,mm4 |
movq .cz2,mm5 |
else if Ext = NON |
else |
mov edx,.dbx13 |
add .cbx1,edx |
mov eax,.dbx12 |
634,23 → 617,8 |
.loop23: |
call .call_bump_line |
if Ext >= SSE2 |
movups xmm0,.cey2 |
movups xmm1,.cey1 |
movups xmm2,.dey23 |
movups xmm3,.dey13 |
paddd xmm0,xmm2 |
paddd xmm1,xmm3 |
movups .cey2,xmm0 |
movups .cey1,xmm1 |
movq mm4,.cz1 |
movq mm5,.cz2 |
paddd mm4,.dz13 |
paddd mm5,.dz23 |
movq .cz1,mm4 |
movq .cz2,mm5 |
end if |
if (Ext = MMX) | (Ext = SSE) |
if Ext >= MMX |
movq mm0,.cby2 |
movq mm1,.cby1 |
movq mm2,.cey2 |
669,7 → 637,7 |
movq .cey2,mm2 |
movq .cz1,mm4 |
movq .cz2,mm5 |
else if Ext = NON |
else |
mov eax,.dx13 |
add .cx1,eax |
mov ebx,.dx23 |
/programs/demos/3DS/BUMP_TEX.INC |
---|
292,6 → 292,24 |
cvtps2pi mm1,xmm1 |
movq .dty12,mm0 |
movq .dz12,mm1 |
;temporaly conversion to keep upside down |
; fninit |
; fld .dx12 |
; fistp .dx12 |
; fld dword .dz12 |
; fistp dword .dz12 |
; fld .dbx12 |
; fistp .dbx12 |
; fld dword .dby12 |
; fistp dword .dby12 |
; fld .dex12 |
; fistp .dex12 |
; fld dword .dey12 |
; fistp dword .dey12 |
; fld .dtx12 |
; fistp .dtx12 |
; fld dword .dty12 |
; fistp dword .dty12 |
;---- |
; mov ax,.z2 |
; sub ax,.z1 |
500,6 → 518,25 |
movq .dty13,mm0 |
movq .dz13,mm1 |
;temporaly conversion to keep upside down |
; fninit |
; fld .dx13 |
; fistp .dx13 |
; fld dword .dz13 |
; fistp dword .dz13 |
; fld .dbx13 |
; fistp .dbx13 |
; fld dword .dby13 |
; fistp dword .dby13 |
; fld .dex13 |
; fistp .dex13 |
; fld dword .dey13 |
; fistp dword .dey13 |
; fld .dtx13 |
; fistp .dtx13 |
; fld dword .dty13 |
; fistp dword .dty13 |
else |
mov ax,.x3 |
662,6 → 699,24 |
movq .dz23,mm1 |
;temporaly conversion to keep upside down |
; fninit |
; fld .dx23 |
; fistp .dx23 |
; fld dword .dz23 |
; fistp dword .dz23 |
; fld .dbx23 |
; fistp .dbx23 |
; fld dword .dby23 |
; fistp dword .dby23 |
; fld .dex23 |
; fistp .dex23 |
; fld dword .dey23 |
; fistp dword .dey23 |
; fld .dtx23 |
; fistp .dtx23 |
; fld dword .dty23 |
; fistp dword .dty23 |
else |
mov ax,.x3 |
sub ax,.x2 |
739,7 → 794,58 |
; sub esp,40 |
.bt_dx23_done: |
sub esp,64 |
;if Ext>=SSE |
; movsx eax,.x1 |
; shl eax,ROUND |
; cvtsi2ss xmm0,eax |
; movss .cx1,xmm0 |
; movss .cx2,xmm0 |
; |
; movsx ebx,word[.b_x1] |
; shl ebx,ROUND |
; cvtsi2ss xmm0,ebx |
; movss .cbx1,xmm0 |
; movss .cbx2,xmm0 |
; |
; movsx ecx,word[.b_y1] |
; shl ecx,ROUND |
; cvtsi2ss xmm0,ecx |
; movss .cby1,xmm0 |
; movss .cby2,xmm0 |
; movsx edx,word[.e_x1] |
; shl edx,ROUND |
; cvtsi2ss xmm0,edx |
; movss .cex1,xmm0 |
; movss .cex2,xmm0 |
; |
; movsx eax,word[.e_y1] |
; shl eax,ROUND |
; cvtsi2ss xmm0,eax |
; movss .cey1,xmm0 |
; movss .cey2,xmm0 |
; |
; movsx ebx,.z1 |
; shl ebx,CATMULL_SHIFT |
; cvtsi2ss xmm0,ebx |
; movss .cz1,xmm0 |
; movss .cz2,xmm0 |
; |
; movsx ecx,word[.t_x1] |
; shl ecx,ROUND |
; cvtsi2ss xmm0,ecx |
; movss .ctx1,xmm0 |
; movss .ctx2,xmm0 |
; movsx edx,word[.t_y1] |
; shl edx,ROUND |
; cvtsi2ss xmm0,edx |
; movss .cty1,xmm0 |
; movss .cty2,xmm0 |
;else |
movsx eax,.x1 |
shl eax,ROUND |
mov .cx1,eax |
796,8 → 902,14 |
mov .cty2,edx |
; push edx |
; push edx |
;end if |
;if Ext >= SSE2 |
movsx ecx,.y1 |
cmp cx,.y2 |
jge .loop12_done |
.loop12: |
call .call_line |
;if Ext >= SSE |
; movups xmm0,.cby1 |
; movups xmm1,.cty1 |
; movups xmm2,.cby2 |
806,36 → 918,22 |
; movups xmm5,.dty13 |
; movups xmm6,.dby12 |
; movups xmm7,.dty12 |
; addps xmm0,xmm4 |
; addps xmm1,xmm5 |
; addps xmm2,xmm6 |
; addps xmm3,xmm7 |
; |
;; addps xmm0,.dby12 |
;; addps xmm1,.dty12 |
;; addps xmm2,.dby13 |
;; addps xmm3,.dty13 |
; movups .cby1,xmm0 |
; movups .cty1,xmm1 |
; movups .cby2,xmm2 |
; movups .cty2,xmm3 |
;end if |
movsx ecx,.y1 |
cmp cx,.y2 |
jge .loop12_done |
.loop12: |
;if Ext >= SSE2 |
; fxsave [sse_repository] |
;end if |
call .call_line |
if Ext >= SSE2 |
; fxrstor [sse_repository] |
movups xmm0,.cby1 |
movups xmm1,.cty1 |
movups xmm2,.cby2 |
movups xmm3,.cty2 |
movups xmm4,.dby13 |
movups xmm5,.dty13 |
movups xmm6,.dby12 |
movups xmm7,.dty12 |
paddd xmm0,xmm4 |
paddd xmm1,xmm5 |
paddd xmm2,xmm6 |
paddd xmm3,xmm7 |
movups .cby1,xmm0 |
movups .cty1,xmm1 |
movups .cby2,xmm2 |
movups .cty2,xmm3 |
end if |
if (Ext = MMX) | (Ext = SSE) |
if Ext >= MMX |
movq mm0,.cby2 |
movq mm1,.cby1 |
movq mm2,.cey2 |
907,6 → 1005,7 |
cmp cx,.y3 |
jge .loop23_done |
;if Ext < SSE |
movsx eax,.z2 |
shl eax,CATMULL_SHIFT |
939,7 → 1038,54 |
movzx ebx,word[.t_y2] |
shl ebx,ROUND |
mov .cty2,ebx |
;if Ext >= SSE2 |
;else |
; movsx eax,.z2 |
; shl eax,CATMULL_SHIFT |
; cvtsi2ss xmm0,eax |
; movss .cz2,xmm0 |
; |
; movsx ebx,.x2 |
; shl ebx,ROUND |
; cvtsi2ss xmm1,ebx |
; movss .cx2,xmm1 |
; |
; movzx edx,word[.b_x2] |
; shl edx,ROUND |
; cvtsi2ss xmm2,edx |
; movss .cbx2,xmm2 |
; |
; movzx eax,word[.b_y2] |
; shl eax,ROUND |
; cvtsi2ss xmm0,eax |
; movss .cby2,xmm0 |
; |
; movzx ebx,word[.e_x2] |
; shl ebx,ROUND |
; cvtsi2ss xmm1,ebx |
; movss .cex2,xmm1 |
; |
; movzx edx,word[.e_y2] |
; shl edx,ROUND |
; cvtsi2ss xmm2,edx |
; movss .cey2,xmm2 |
; |
; movzx eax,word[.t_x2] |
; shl eax,ROUND |
; cvtsi2ss xmm0,eax |
; movss .ctx2,xmm0 |
; |
; movzx ebx,word[.t_y2] |
; shl ebx,ROUND |
; cvtsi2ss xmm1,ebx |
; movss .cty2,xmm1 |
;end if |
.loop23: |
call .call_line |
;if Ext >= SSE |
; movups xmm0,.cby1 |
; movups xmm1,.cty1 |
; movups xmm2,.cby2 |
948,34 → 1094,21 |
; movups xmm5,.dty13 |
; movups xmm6,.dby23 |
; movups xmm7,.dty23 |
; addps xmm0,xmm4 |
; addps xmm1,xmm5 |
; addps xmm2,xmm6 |
; addps xmm3,xmm7 |
; ; addps xmm0,.dby13 |
; ; addps xmm1,.dty13 |
; ; addps xmm2,.dby23 |
; ; addps xmm3,.dty23 |
; movups .cby1,xmm0 |
; movups .cty1,xmm1 |
; movups .cby2,xmm2 |
; movups .cty2,xmm3 |
; |
;end if |
.loop23: |
;if Ext >= SSE2 |
; fxsave [sse_repository] |
;end if |
call .call_line |
if Ext >= SSE2 |
; fxrstor [sse_repository] |
movups xmm0,.cby1 |
movups xmm1,.cty1 |
movups xmm2,.cby2 |
movups xmm3,.cty2 |
movups xmm4,.dby13 |
movups xmm5,.dty13 |
movups xmm6,.dby23 |
movups xmm7,.dty23 |
paddd xmm0,xmm4 |
paddd xmm1,xmm5 |
paddd xmm2,xmm6 |
paddd xmm3,xmm7 |
movups .cby1,xmm0 |
movups .cty1,xmm1 |
movups .cby2,xmm2 |
movups .cty2,xmm3 |
; |
end if |
if (Ext = MMX) | (Ext = SSE) |
if Ext >= MMX |
movq mm0,.cby2 |
movq mm1,.cby1 |
movq mm2,.cey2 |
1047,7 → 1180,90 |
ret 50 |
.call_line: |
;if Ext >= SSE |
; pushad |
; push .tex_ptr |
; fninit |
; fld dword .cty1 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push dword .cty1 |
; fld .ctx1 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push .ctx1 |
; fld dword .cz1 |
; fistp dword [esp-4] |
; sub esp,4 |
; ; push dwod .cz1 |
; fld dword .cty2 |
; fistp dword [esp-4] |
; sub esp,4 |
; ; push .cty2 |
; fld .ctx2 |
; fistp dword [esp-4] |
; sub esp,4 |
; ; push dword .ctx2 |
; fld dword .cz2 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push dword .cz2 |
; |
; push .z_buff |
; push .t_emap |
; push .t_bmap |
;-------------------------------------- |
; fld dword .cey2 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push dword .cey2 |
; |
; fld .cex2 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push .cex2 |
; |
; fld dword .cby2 |
; fistp dword [esp-4] |
; sub esp,4 |
; ; push dword .cby2 |
; fld .cbx2 |
; fistp dword [esp-4] |
; sub esp,4 |
; push .cbx2 |
;------------------------------------ |
; fld dword .cey1 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push dword .cey1 |
; fld .cex1 |
; fistp dword [esp-4] |
; sub esp,4 |
; ; push .cex1 |
; fld dword .cby1 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push dword .cby1 |
; fld .cbx1 |
; fistp dword [esp-4] |
; sub esp,4 |
;; push .cbx1 |
; push ecx |
; fld .cx1 |
; fistp dword [esp-4] |
; mov eax,[esp-4] |
; sar eax,ROUND |
; fld .cx2 |
; fistp dword [esp-4] |
; mov ebx,[esp-4] |
; sar ebx,ROUND |
; call bump_tex_line_z |
; |
; popad |
;else |
pushad |
push .tex_ptr |
push dword .cty1 |
1065,16 → 1281,8 |
push .cbx2 |
push dword .cey1 |
push .cex1 |
;if Ext >= SSE2 |
; sub esp,8 |
; shufps xmm0,xmm0,10110100b |
; movhps [esp],xmm0 ;================================ |
;else |
push dword .cby1 |
push .cbx1 |
;end if |
push ecx |
mov eax,.cx1 |
/programs/demos/3DS/TWO_TEX.INC |
---|
88,12 → 88,16 |
.cx1 equ dword[ebp-96] ; current variables |
.cx2 equ dword[ebp-100] |
;.cbx1q equ [ebp-104] |
.cbx1 equ dword[ebp-104] |
.cby1 equ [ebp-108] |
.cex1 equ dword[ebp-112] |
.cey1 equ [ebp-116] |
.cbx2 equ dword[ebp-120] |
.cby2 equ [ebp-124] |
;.cbx2q [ebp-112] |
.cbx2 equ dword[ebp-112] |
.cby2 equ [ebp-116] |
;.cex1q equ [ebp-120] |
.cex1 equ dword[ebp-120] |
.cey1 equ [ebp-124] |
;.cex2q equ [ebp-128] |
.cex2 equ dword[ebp-128] |
.cey2 equ [ebp-132] |
575,16 → 579,8 |
add .cx1,eax |
mov ebx,.dx12 |
add .cx2,ebx |
if Ext>= SSE2 |
movups xmm0,.cey1 |
movups xmm1,.cey2 |
movups xmm2,.dey12q |
movups xmm3,.dey13q |
paddd xmm0,xmm3 |
paddd xmm1,xmm2 |
movups .cey1,xmm0 |
movups .cey2,xmm1 |
else if (Ext = MMX) | (Ext=SSE) |
if Ext >= MMX |
movq mm0,.cby2 ; with this optimization object |
movq mm1,.cby1 ; looks bit annoying |
movq mm2,.cey2 |
662,16 → 658,8 |
add .cx1,eax |
mov ebx,.dx23 |
add .cx2,ebx |
if Ext>= SSE2 |
movups xmm0,.cey1 |
movups xmm1,.cey2 |
movups xmm2,.dey23q |
movups xmm3,.dey13q |
paddd xmm0,xmm3 |
paddd xmm1,xmm2 |
movups .cey1,xmm0 |
movups .cey2,xmm1 |
else if (Ext = MMX) | ( Ext = SSE) |
if Ext >= MMX |
movq mm0,.cby2 ; with this mmx optimization object looks bit |
movq mm1,.cby1 ; annoying |
movq mm2,.cey2 |
/programs/demos/3DS/readme.txt |
---|
1,9 → 1,12 |
View3ds 0.060 - tiny viewer to .3ds files. |
View3ds 0.059 - tiny viewer to .3ds files. |
What's new? |
1. Header fix by Leency. |
2. SSE2 optimizations by me. (Most visable in BUMP_TEX mode.) |
1. Bump and pararell two texture mapping functions optimizations. |
(files bump_cat.inc & two_tex.inc) |
On my P4 changes are rather non visable, but on dual core in KlbrInWin |
optimizations runs preety nice. |
Buttons description: |
1. rotary: choosing rotary axle: x, y, x+y. |
2. shd. model: choosing shading model: flat, grd (smooth), env (spherical |
30,4 → 33,4 |
18. re-map tex -> re-map texture and bump map coordinates, to change spherical mapping |
around axle use 'xchg' and 'mirror' buttons, then press 're-map tex' button. |
Macgub Aug 2011 |
Macgub Jun 2011 |
/programs/demos/3DS/GRD_TEX.INC |
---|
486,7 → 486,7 |
; pop ebp ebx eax |
popad |
if (Ext = MMX)|(Ext=SSE) |
if Ext >= MMX |
movq mm0,.cur1b |
movq mm1,.cur1r |
movq mm2,.scan_y1 |
505,25 → 505,7 |
movq .cur2b,mm3 |
movq .cur2r,mm4 |
movq .scan_y2,mm5 |
end if |
if Ext >= SSE2 |
movups xmm0,.cur1b |
movups xmm1,.dc13b |
movups xmm2,.cur2b |
movups xmm3,.dc12b |
movq mm2,.scan_y1 |
movq mm5,.scan_y2 |
paddd xmm0,xmm1 |
paddd xmm2,xmm3 |
paddd mm2,.tex_dy13 |
paddd mm5,.tex_dy12 |
movq .scan_y1,mm2 |
movq .scan_y2,mm5 |
movups .cur1b,xmm0 |
movups .cur2b,xmm2 |
end if |
if Ext = NON |
else |
mov edx,.dc13b |
add .cur1b,edx |
mov esi,.dc13g |
620,7 → 602,7 |
popad |
if (Ext = MMX)|(Ext=SSE) |
if Ext >= MMX |
movq mm0,.cur1b |
movq mm1,.cur1r |
movq mm2,.scan_y1 |
639,24 → 621,7 |
movq .cur2b,mm3 |
movq .cur2r,mm4 |
movq .scan_y2,mm5 |
end if |
if Ext >= SSE2 |
movups xmm0,.cur1b |
movups xmm1,.dc13b |
movups xmm2,.cur2b |
movups xmm3,.dc23b |
movq mm2,.scan_y1 |
movq mm5,.scan_y2 |
paddd xmm0,xmm1 |
paddd xmm2,xmm3 |
paddd mm2,.tex_dy13 |
paddd mm5,.tex_dy23 |
movq .scan_y1,mm2 |
movq .scan_y2,mm5 |
movups .cur1b,xmm0 |
movups .cur2b,xmm2 |
end if |
if Ext = NON |
else |
mov edx,.dc13b |
add .cur1b,edx |
mov esi,.dc13g |
775,8 → 740,8 |
mov ecx,dword .z1 |
xchg ecx, .z2 |
mov dword .z1, ecx |
end if |
if (Ext=MMX) |
else |
movq mm0,.b1 ; b, g |
movq mm1,.b2 |
movq .b1, mm1 |
791,16 → 756,6 |
movq .tex_x2,mm4 |
end if |
if Ext>=SSE |
movups xmm0,.b1 |
movups xmm1,.b2 |
movups .b1,xmm1 |
movups .b2,xmm0 |
movq mm4,.tex_x1 ; x, z |
movq mm5,.tex_x2 |
movq .tex_x1,mm5 |
movq .tex_x2,mm4 |
end if |
@@: |
or bx,bx |