From 0e20133b51069f39afe07738b373d26a4ee35f2b Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 4 Jun 2012 14:10:52 +0000 Subject: [PATCH] View3DS 0.61 git-svn-id: svn://kolibrios.org@2736 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/demos/3DS/B_PROCS.INC | 6 +- programs/demos/3DS/DATA.INC | 29 ++++- programs/demos/3DS/History.txt | 5 + programs/demos/3DS/VIEW3DS.ASM | 217 ++++++++++++++++++++++++++++++--- 4 files changed, 234 insertions(+), 23 deletions(-) diff --git a/programs/demos/3DS/B_PROCS.INC b/programs/demos/3DS/B_PROCS.INC index 342a779cd3..d73e8f64ac 100644 --- a/programs/demos/3DS/B_PROCS.INC +++ b/programs/demos/3DS/B_PROCS.INC @@ -755,8 +755,8 @@ if Ext>=SSE2 mov ecx,(SIZE_X*(SIZE_Y-3))*3/16 .blr: @@: - movups xmm0,[edi+SIZE_X*3] - movups xmm1,[edi-SIZE_X*3] + movaps xmm0,[edi+SIZE_X*3] + movaps xmm1,[edi-SIZE_X*3] movups xmm2,[edi-3] movups xmm3,[edi+3] @@ -766,7 +766,7 @@ if Ext>=SSE2 psubusb xmm0,xmm5 ; importand if fire - movups [edi],xmm0 + movaps [edi],xmm0 add edi,16 add esi,16 diff --git a/programs/demos/3DS/DATA.INC b/programs/demos/3DS/DATA.INC index c3b11ea1ff..b9ef034e14 100644 --- a/programs/demos/3DS/DATA.INC +++ b/programs/demos/3DS/DATA.INC @@ -152,6 +152,33 @@ bumps_deep_flag db 3 db 255 map_tex_flag db ? ;1 dd ? ;bumps_d_f + + db 22 + db 'bright + ' + db 6 +inc_bright_flag db 0 ;1 + dd blur_f + + db 23 + db 'bright - ' + db 6 +dec_bright_flag db 0 ;1 + dd blur_f + +; db 24 +; db 'max ' +; db 2 +;max_flag db 0 ;1 +; dd blur_f +; +; db 25 +; db 'min ' +; db 2 +;min_flag db 0 ;1 +; dd blur_f + + + ; db 21 ; db 'light No. ' ; db 3 @@ -271,7 +298,7 @@ base_vector: if Ext=SSE2 db ' (SSE2)' end if - db ' 0.060',0 + db ' 0.061',0 labellen: STRdata db '-1 ' diff --git a/programs/demos/3DS/History.txt b/programs/demos/3DS/History.txt index 3178d7a49e..e601ff9969 100644 --- a/programs/demos/3DS/History.txt +++ b/programs/demos/3DS/History.txt @@ -1,6 +1,11 @@ +View3ds 0.061 - Nov 2011. +1. Two new buttons to increase and decrease brightness. +----------------------------------------------------------------------------------- + View3ds 0.060 - Aug 2011. 1. Header fix by Leency. 2. SSE2 optimizations by me. (Most visable in BUMP_TEX mode.) +----------------------------------------------------------------------------------- View3ds 0.059 - June 2011. 1. Bump and pararell two texture mapping functions optimizations. diff --git a/programs/demos/3DS/VIEW3DS.ASM b/programs/demos/3DS/VIEW3DS.ASM index 6de5e90586..86cf2acef6 100644 --- a/programs/demos/3DS/VIEW3DS.ASM +++ b/programs/demos/3DS/VIEW3DS.ASM @@ -1,5 +1,5 @@ -; application : View3ds ver. 0.060 - tiny .3ds files viewer. +; application : View3ds ver. 0.061 - tiny .3ds files viewer. ; compiler : FASM ; system : KolibriOS ; author : Macgub aka Maciej Guba @@ -19,23 +19,23 @@ ;include 'proc32.inc' SIZE_X equ 512 -SIZE_Y equ 512 ; ///// I want definitely -TIMEOUT equ 10 ; ------ say: -ROUND equ 10 ; \ @ @/ keep smiling every -TEX_X equ 512 ; texture width ; \ ./ / day. -TEX_Y equ 512 ; height ; \/ / -TEX_SHIFT equ 9 ; texture width shifting ; __||__ / -TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1 ; /| | -TEX equ SHIFTING ; TEX={SHIFTING | FLUENTLY} ; / \ / -FLUENTLY = 0 ; / | | -SHIFTING = 1 ; ------ -CATMULL_SHIFT equ 8 ; | | -LIGHT_SIZE equ 22 ; | | -NON = 0 ; -/ \- +SIZE_Y equ 512 ; ///// I want definitely +TIMEOUT equ 10 ; ------ say: +ROUND equ 10 ; \ @ @/ keep smiling every +TEX_X equ 512 ; texture width ; \ ./ / day. +TEX_Y equ 512 ; height ; \/ / +TEX_SHIFT equ 9 ; texture width shifting ; __||__ / +TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1 ; /| | +TEX equ SHIFTING ; TEX={SHIFTING | FLUENTLY} ; / \ / +FLUENTLY = 0 ; / | | +SHIFTING = 1 ; ------ +CATMULL_SHIFT equ 8 ; | | +LIGHT_SIZE equ 22 ; | | +NON = 0 ; -/ \- MMX = 1 SSE = 2 SSE2 = 3 -Ext = MMX ;Ext={ NON | MMX | SSE | SSE2 } +Ext = SSE2 ;Ext={ NON | MMX | SSE | SSE2 } ; 0 for short names (Menuet-compatible), 1 for long names (Kolibri features) USE_LFN = 1 @@ -93,7 +93,6 @@ START: ; start of execution call calc_bumpmap_coords ; bump and texture mapping call draw_window - still: mov eax,23 ; wait here for event with timeout @@ -457,6 +456,180 @@ still: @@: + cmp [inc_bright_flag],0 ; increase brightness + je .no_inc_bright + movzx ebx,[inc_bright_flag] + shl ebx,4 + mov esi,screen + mov ecx,SIZE_X*SIZE_Y*3 +if (Ext = MMX)|(Ext = SSE) + mov bh,bl + push bx + shl ebx,16 + pop bx + push ebx + push ebx + movq mm0,[esp] + add esp,8 +else if Ext >= SSE2 + mov bh,bl + push bx + shl ebx,16 + pop bx + movd xmm0,ebx + shufps xmm0,xmm0,0 +end if + .oop: +if Ext=NON + lodsb + add al,bl + jnc @f + mov byte[esi-1],255 + loop .oop + @@: + mov [esi-1],al + loop .oop +else if (Ext=MMX)|(Ext=SSE) + movq mm1,[esi] + movq mm2,[esi+8] + paddusb mm1,mm0 + paddusb mm2,mm0 + movq [esi],mm1 + movq [esi+8],mm2 + add esi,16 + sub ecx,16 + jnz .oop +else + movaps xmm1,[esi] + paddusb xmm1,xmm0 + movaps [esi],xmm1 + add esi,16 + sub ecx,16 + jnz .oop +end if + +.no_inc_bright: + + + cmp [dec_bright_flag],0 + je .no_dec_bright + movzx ebx,[dec_bright_flag] + shl ebx,4 + mov esi,screen + mov ecx,SIZE_X*SIZE_Y*3 +if (Ext = MMX)|(Ext = SSE) + mov bh,bl + push bx + shl ebx,16 + pop bx + push ebx + push ebx + movq mm0,[esp] + add esp,8 +else if Ext >=SSE2 + mov bh,bl + push bx + shl ebx,16 + pop bx + movd xmm0,ebx + shufps xmm0,xmm0,0 +end if + .oop1: +if Ext=NON + lodsb + sub al,bl + jb @f + mov [esi-1],al + loop .oop1 + @@: + mov byte[esi-1],0 + loop .oop1 +else if (Ext = MMX)|(Ext=SSE) + movq mm1,[esi] + psubusb mm1,mm0 + movq [esi],mm1 + add esi,8 + sub ecx,8 + jnz .oop1 +else + movaps xmm1,[esi] + psubusb xmm1,xmm0 + movaps [esi],xmm1 + add esi,16 + sub ecx,16 + jnz .oop1 +end if + .no_dec_bright: +;======================================commmented==================== +if 0 +if Ext >= SSE + cmp [max_flag],0 + je .no_max + ;movzx ebx,[max_flag] + .again_max: +; push ecx + mov edi,screen + mov ecx,SIZE_X*3/4 + ; ; pxor mm5,mm5 + xor eax,eax + rep stosd + + mov ecx,(SIZE_X*(SIZE_Y-3))*3/8 + .calc_max: + @@: + movq mm0,[edi+SIZE_X*3] + movq mm1,[edi-SIZE_X*3] + movq mm2,[edi-3] + movq mm3,[edi+3] + + pmaxub mm0,mm1 + pmaxub mm2,mm3 + pmaxub mm0,mm2 + + movq [edi],mm0 + add edi,8 + loop @b + + xor eax,eax + mov ecx,SIZE_X*3/4 + rep stosd +end if + +.no_max: + +if Ext >= SSE + cmp [min_flag],0 + je .no_min +; push ecx + mov edi,screen + mov ecx,SIZE_X*3/4 + ; ; pxor mm5,mm5 + xor eax,eax + rep stosd + + mov ecx,(SIZE_X*(SIZE_Y-3))*3/8 + @@: + movq mm0,[edi+SIZE_X*3] + movq mm1,[edi-SIZE_X*3] + movq mm2,[edi-3] + movq mm3,[edi+3] + + pminub mm0,mm1 + pminub mm2,mm3 + pminub mm0,mm2 + + movq [edi],mm0 + add edi,8 + loop @b + + xor eax,eax + + mov ecx,SIZE_X*3/4 + rep stosd +end if +.no_min: +end if +;========================commented===================================== RDTSC sub eax,[esp] sub eax,41 @@ -478,10 +651,15 @@ still: mov edx,5 shl 16 + 23 int 0x40 - + mov eax,13 + mov ebx,530*65536+60 + mov ecx,510*65536+9 + xor edx,edx + int 40h + mov eax,4 ; function 4 : write text to window - mov ebx,5*65536+23 ; [x start] *65536 + [y start] - mov ecx,0x00ffffff ;-1 + mov ebx,530*65536+510 ; [x start] *65536 + [y start] + mov ecx,0x00888888 mov edx,STRdata ; pointer to text beginning mov esi,10 ; text length int 40h @@ -508,6 +686,7 @@ include "BUMP_TEX.INC" include "GRD_TEX.INC" include "TWO_TEX.INC" + alloc_buffer_mem: movzx ecx,[size_x] movzx eax,[size_y]