Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2191 → Rev 2192

/programs/demos/3DS/BUMP_CAT.INC
81,10 → 81,10
.cz2 equ [ebp-108]
.cbx1 equ dword[ebp-112]
.cby1 equ [ebp-116]
.cbx2 equ dword[ebp-120]
.cby2 equ [ebp-124]
.cex1 equ dword[ebp-128]
.cey1 equ [ebp-132]
.cex1 equ dword[ebp-120]
.cey1 equ [ebp-124]
.cbx2 equ dword[ebp-128]
.cby2 equ [ebp-132]
.cex2 equ dword[ebp-136]
.cey2 equ [ebp-140]
 
533,8 → 533,25
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
 
if (Ext = MMX) | (Ext = SSE)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
553,7 → 570,7
movq .cey2,mm2
movq .cz1,mm4
movq .cz2,mm5
else
else if Ext = NON
mov edx,.dbx13
add .cbx1,edx
mov eax,.dbx12
617,8 → 634,23
 
.loop23:
call .call_bump_line
 
if Ext >= MMX
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)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
637,7 → 669,7
movq .cey2,mm2
movq .cz1,mm4
movq .cz2,mm5
else
else if Ext = NON
mov eax,.dx13
add .cx1,eax
mov ebx,.dx23
/programs/demos/3DS/BUMP_TEX.INC
292,24 → 292,6
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
518,25 → 500,6
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
699,24 → 662,6
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
794,58 → 739,7
; 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
902,14 → 796,8
mov .cty2,edx
; push edx
; push edx
;end if
 
movsx ecx,.y1
cmp cx,.y2
jge .loop12_done
.loop12:
call .call_line
;if Ext >= SSE
;if Ext >= SSE2
; movups xmm0,.cby1
; movups xmm1,.cty1
; movups xmm2,.cby2
918,22 → 806,36
; 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
if (Ext = MMX) | (Ext = SSE)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
1005,7 → 907,6
cmp cx,.y3
jge .loop23_done
 
;if Ext < SSE
 
movsx eax,.z2
shl eax,CATMULL_SHIFT
1038,54 → 939,7
movzx ebx,word[.t_y2]
shl ebx,ROUND
mov .cty2,ebx
;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
 
;if Ext >= SSE2
; movups xmm0,.cby1
; movups xmm1,.cty1
; movups xmm2,.cby2
1094,21 → 948,34
; 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
end if
if (Ext = MMX) | (Ext = SSE)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
1180,90 → 1047,7
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
1281,8 → 1065,16
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/DATA.INC
271,7 → 271,7
if Ext=SSE2
db ' (SSE2)'
end if
db ' 0.059',0
db ' 0.060',0
labellen:
STRdata db '-1 '
 
/programs/demos/3DS/GRD_TEX.INC
486,7 → 486,7
; pop ebp ebx eax
popad
 
if Ext >= MMX
if (Ext = MMX)|(Ext=SSE)
movq mm0,.cur1b
movq mm1,.cur1r
movq mm2,.scan_y1
505,7 → 505,25
movq .cur2b,mm3
movq .cur2r,mm4
movq .scan_y2,mm5
else
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
mov edx,.dc13b
add .cur1b,edx
mov esi,.dc13g
602,7 → 620,7
 
popad
 
if Ext >= MMX
if (Ext = MMX)|(Ext=SSE)
movq mm0,.cur1b
movq mm1,.cur1r
movq mm2,.scan_y1
621,7 → 639,24
movq .cur2b,mm3
movq .cur2r,mm4
movq .scan_y2,mm5
else
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
mov edx,.dc13b
add .cur1b,edx
mov esi,.dc13g
740,8 → 775,8
mov ecx,dword .z1
xchg ecx, .z2
mov dword .z1, ecx
 
else
end if
if (Ext=MMX)
movq mm0,.b1 ; b, g
movq mm1,.b2
movq .b1, mm1
756,6 → 791,16
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
/programs/demos/3DS/TWO_TEX.INC
88,16 → 88,12
 
.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]
;.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]
.cex1 equ dword[ebp-112]
.cey1 equ [ebp-116]
.cbx2 equ dword[ebp-120]
.cby2 equ [ebp-124]
.cex2 equ dword[ebp-128]
.cey2 equ [ebp-132]
 
579,8 → 575,16
add .cx1,eax
mov ebx,.dx12
add .cx2,ebx
 
if Ext >= MMX
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)
movq mm0,.cby2 ; with this optimization object
movq mm1,.cby1 ; looks bit annoying
movq mm2,.cey2
658,8 → 662,16
add .cx1,eax
mov ebx,.dx23
add .cx2,ebx
 
if Ext >= MMX
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)
movq mm0,.cby2 ; with this mmx optimization object looks bit
movq mm1,.cby1 ; annoying
movq mm2,.cey2
/programs/demos/3DS/VIEW3DS.ASM
1,5 → 1,5
 
; application : View3ds ver. 0.059 - tiny .3ds files viewer.
; application : View3ds ver. 0.060 - tiny .3ds files viewer.
; compiler : FASM
; system : KolibriOS
; author : Macgub aka Maciej Guba
/programs/demos/3DS/readme.txt
1,12 → 1,9
View3ds 0.059 - tiny viewer to .3ds files.
View3ds 0.060 - tiny viewer to .3ds files.
 
What's new?
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.
1. Header fix by Leency.
2. SSE2 optimizations by me. (Most visable in BUMP_TEX mode.)
 
Buttons description:
1. rotary: choosing rotary axle: x, y, x+y.
2. shd. model: choosing shading model: flat, grd (smooth), env (spherical
33,4 → 30,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 Jun 2011
Macgub Aug 2011