Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2881 → Rev 2736

/programs/demos/3DS/GRD_LINE.INC
File deleted
/programs/demos/3DS/DATA.INC
41,7 → 41,7
 
db 3
db 'shd. model'
db 12
db 11
dr_flag db 0
dd shd_f
 
214,7 → 214,6
db '2tex'
db 'btex'
db 'cenv'
db 'grdl'
spd_f:
db 'idle'
db 'full'
299,7 → 298,7
if Ext=SSE2
db ' (SSE2)'
end if
db ' 0.062',0
db ' 0.061',0
labellen:
STRdata db '-1 '
 
402,11 → 401,7
xx3 dw ?;+56
yy3 dw ?
zz3 dw ? ; xx1 + 16
col1 dd ?
col2 dd ?
col3 dd ?
scale dd ? ; help scale variable
edges_counter dd ?
;==
triangles_count_var dw ?
points_count_var dw ?
420,7 → 415,6
points_translated_ptr dd ?
screen_ptr dd ?
Zbuffer_ptr dd ?
edges_ptr dd ?
 
;===
 
498,9 → 492,6
tex_points rb points_count * 4 ; bump_map and texture coords
; each point word x, word y
align 16
if Ext >= SSE2
sse_repository rb 1024
end if
; SourceFile: ; source file temporally in screen area
; workarea dd ?
 
/programs/demos/3DS/VIEW3DS.ASM
1,5 → 1,5
 
; application : View3ds ver. 0.062 - tiny .3ds files viewer.
; application : View3ds ver. 0.061 - tiny .3ds files viewer.
; compiler : FASM
; system : KolibriOS
; author : Macgub aka Maciej Guba
665,9 → 665,7
int 40h
 
 
; addsubps xmm0,xmm0
 
 
jmp still
 
;--------------------------------------------------------------------------------
678,7 → 676,6
include "TEX_CAT.INC"
include "BUMP_CAT.INC"
include "3DMATH.INC"
include "GRD_LINE.INC"
include "GRD3.INC"
include "FLAT3.INC"
include "BUMP3.INC"
690,7 → 687,6
include "TWO_TEX.INC"
 
 
 
alloc_buffer_mem:
movzx ecx,[size_x]
movzx eax,[size_y]
1589,7 → 1585,6
 
draw_triangles:
mov esi,[triangles_ptr]
mov [edges_counter],0
.again_dts:
mov ebp,[points_translated_ptr]
if Ext=NON
1695,8 → 1690,6
je .bump_tex
cmp [dr_flag],10
je .cubic_env_mapping
cmp [dr_flag],11
je .draw_smooth_line
; ****************
mov esi,point_index3 ; do Gouraud shading
mov ecx,3
2386,151 → 2379,9
 
call bump_tex_triangle_z
 
jmp .end_draw
 
.draw_smooth_line:
mov esi,point_index3
mov ecx,3
.again_line_param:
movzx eax,word[esi]
shl eax,2
lea eax,[eax*3]
add eax,[points_normals_rot_ptr]
; texture ;x=(rotated point normal -> x * 255)+255
fld dword[eax] ; x cooficient of normal vector
fimul [correct_tex]
fiadd [correct_tex]
fistp word[esp-2]
; texture y=(rotated point normal -> y * 255)+255
fld dword[eax+4] ; y cooficient
fimul [correct_tex]
fiadd [correct_tex]
fistp word[esp-4]
 
movzx eax,word[esp-4]
movzx ebx,word[esp-2]
shl eax,TEX_SHIFT
add eax,ebx
lea eax,[eax*3+color_map]
mov eax,dword[eax]
lea ebx,[ecx-1]
shl ebx,2
mov [ebx+col1],eax
 
sub esi,2
dec ecx
jnz .again_line_param
 
mov eax,[edges_ptr]
add eax,[edges_counter]
mov bl,[eax]
test bl,00000001b
jz @f
mov edi,screen
mov esi,[Zbuffer_ptr]
 
mov eax,[col1]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz1]
push [yy1]
push [xx1]
 
mov eax,[col2]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz2]
push [yy2]
push [xx2]
 
call smooth_line
@@:
mov eax,[edges_ptr]
add eax,[edges_counter]
mov bl,[eax]
test bl,00000010b
jz @f
 
mov edi,screen
mov esi,[Zbuffer_ptr]
 
mov eax,[col1]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz1]
push [yy1]
push [xx1]
 
mov eax,[col3]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz3]
push [yy3]
push [xx3]
 
call smooth_line
@@:
 
mov eax,[edges_ptr]
add eax,[edges_counter]
mov bl,[eax]
test bl,00000100b
jz @f
 
mov edi,screen
mov esi,[Zbuffer_ptr]
 
mov eax,[col3]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz3]
push [yy3]
push [xx3]
 
mov eax,[col2]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz2]
push [yy2]
push [xx2]
 
call smooth_line
@@:
 
.end_draw:
pop esi
add esi,6
inc [edges_counter]
cmp dword[esi],-1
jne .again_dts
ret
2568,7 → 2419,6
mov [EndFile],eax ;
 
add esi,6
mov eax,[edges_ptr]
@@:
cmp [esi],word 3D3Dh
je @f
2653,9 → 2503,6
add word[edi-6],bp
add word[edi-4],bp
add word[edi-2],bp
mov dl,byte[esi]
mov [eax],dl
inc eax
add esi,2
dec ecx
jnz @b
2773,7 → 2620,6
@@:
mov ebx,20
.alloc:
 
movzx ecx, [triangles_count_var]
inc ecx
lea ecx, [ecx*3]
2782,14 → 2628,6
int 0x40 ; -> allocate memory to triangles
mov [triangles_ptr], eax ; -> eax = pointer to allocated mem
 
mov eax, 68
movzx ecx, [triangles_count_var]
inc ecx
mov edx,[edges_ptr]
int 0x40 ; -> allocate memory to edges
mov [edges_ptr], eax ; -> eax = pointer to allocated mem
 
 
; mov eax, 68
; mov ebx, 12
; movzx ecx, [triangles_count_var]
/programs/demos/3DS/BUMP_CAT.INC
837,7 → 837,7
mov ebx,.x2
sub ebx,.x1
 
if Ext >= SSE
if 0 ;Ext >= SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
954,7 → 954,7
movq mm2,.dby
movq mm3,.dey
end if
;align 16
 
.draw:
; if TEX = SHIFTING ;bump drawing only in shifting mode
mov esi,.czbuff ; .czbuff current address in buffer
/programs/demos/3DS/BUMP_TEX.INC
60,38 → 60,6
.x3 equ word[ebp-18]
.y3 equ word[ebp-20]
 
if 0 ;Ext <= SSE2
 
.dx12 equ dword[edi-4]
.dz12 equ [edi-8]
.dbx12 equ dword[edi-12]
.dby12 equ [edi-16]
.dex12 equ dword[edi-20]
.dey12 equ [edi-24]
.dtx12 equ dword[edi-28]
.dty12 equ [edi-32]
 
.dx13 equ dword[ebp-52-4*1]
.dz13 equ [ebp-52-4*2]
.dbx13 equ dword[ebp-52-4*3]
.dby13 equ [ebp-52-4*4]
.dex13 equ dword[ebp-52-4*5]
.dey13 equ [ebp-52-4*6]
.dtx13 equ dword[ebp-52-4*7]
.dty13 equ [ebp-52-4*8]
 
 
.dx23 equ dword[ebp-(52+4*9)]
.dz23 equ [ebp-(52+4*10)]
.dbx23 equ dword[ebp-(52+4*11)]
.dby23 equ [ebp-(52+4*12)]
.dex23 equ dword[ebp-(52+4*13)]
.dey23 equ [ebp-(52+4*14)]
.dtx23 equ dword[ebp-(52+4*15)]
.dty23 equ [ebp-(52+4*16)]
 
else
 
.dx12 equ dword[ebp-24]
.dz12 equ [ebp-28]
.dbx12 equ dword[ebp-32]
120,8 → 88,6
.dtx23 equ dword[ebp-(52+4*15)]
.dty23 equ [ebp-(52+4*16)]
 
end if
 
if Ext < SSE
 
.cx1 equ dword[ebp-(52+4*17)] ; current variables
228,18 → 194,11
mov bx,.y2 ; calc delta 12
sub bx,.y1
jnz .bt_dx12_make
if 0 ;Ext >= SSE2
pxor xmm0,xmm0
movups .dty12,xmm0
movups .dey12,xmm0
sub esp,16
else
mov ecx,8
xor edx,edx
@@:
push edx ;dword 0
loop @b
end if
jmp .bt_dx12_done
.bt_dx12_make:
movsx ebx,bx
250,11 → 209,6
; mov eax,256
cvtsi2ss xmm4,[i255d]
cvtsi2ss xmm3,ebx ;rcps
if 0 ;Ext >= SSE2
mov edi,ebp
sub edi,512
or edi,0x0000000f
end if
divss xmm3,xmm4
shufps xmm3,xmm3,0
 
843,36 → 797,16
; push edx
; push edx
 
if Ext >= SSE2
movups xmm0,.cby1
movups xmm1,.cty1
movups xmm2,.cby2
movups xmm3,.cty2
movups xmm4,.dby13
movups xmm5,.dty13
movups xmm6,.dby12
movups xmm7,.dty12
.scby1 equ [edi]
.scty1 equ [edi+16]
.scby2 equ [edi+32]
.scty2 equ [edi+48]
.sdby13 equ [edi+64]
.sdty13 equ [edi+80]
.sdby12 equ [edi+96]
.sdty12 equ [edi+128]
push edi
mov edi,sse_repository
movaps .scby1,xmm0
movaps .scty1,xmm1
movaps .scby2,xmm2
movaps .scty2,xmm3
movaps .sdby13,xmm4
movaps .sdty13,xmm5
movaps .sdby12,xmm6
movaps .sdty12,xmm7
pop edi
 
end if
;if Ext >= SSE2
; movups xmm0,.cby1
; movups xmm1,.cty1
; movups xmm2,.cby2
; movups xmm3,.cty2
; movups xmm4,.dby13
; movups xmm5,.dty13
; movups xmm6,.dby12
; movups xmm7,.dty12
;end if
movsx ecx,.y1
cmp cx,.y2
jge .loop12_done
887,21 → 821,14
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
push edi
mov edi,sse_repository
paddd xmm0,.sdby13
paddd xmm1,.sdty13
paddd xmm2,.sdby12
paddd xmm3,.sdty12
pop edi
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
1012,35 → 939,16
movzx ebx,word[.t_y2]
shl ebx,ROUND
mov .cty2,ebx
if Ext >= SSE2
movups xmm2,.cby2
movups xmm3,.cty2
;if Ext >= SSE2
; movups xmm0,.cby1
; movups xmm1,.cty1
; movups xmm2,.cby2
; movups xmm3,.cty2
; movups xmm4,.dby13
; movups xmm5,.dty13
movups xmm6,.dby23
movups xmm7,.dty23
; .scby1 equ [edi]
; .scty1 equ [edi+16]
; .scby2 equ [edi+32]
; .scty2 equ [edi+48]
; .sdby13 equ [edi+64]
; .sdty13 equ [edi+80]
.sdby23 equ [edi+160]
.sdty23 equ [edi+192]
push edi
mov edi,sse_repository
; movaps .scby1,xmm0
; movaps .scty1,xmm1
movaps .scby2,xmm2
movaps .scty2,xmm3
; movaps .sdby13,xmm4
; movaps .sdty13,xmm5
movaps .sdby23,xmm6
movaps .sdty23,xmm7
pop edi
 
end if
 
; movups xmm6,.dby23
; movups xmm7,.dty23
;end if
.loop23:
;if Ext >= SSE2
; fxsave [sse_repository]
1048,45 → 956,23
call .call_line
 
if Ext >= SSE2
 
; fxrstor [sse_repository]
movups xmm0,.cby1
movups xmm1,.cty1
movups xmm2,.cby2
movups xmm3,.cty2
 
 
push edi
mov edi,sse_repository
paddd xmm0,.sdby13
paddd xmm1,.sdty13
paddd xmm2,.sdby23
paddd xmm3,.sdty23
pop edi
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
 
 
 
 
; 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)
1163,36 → 1049,16
.call_line:
 
pushad
; xmm0= cby1,cbx1,cz1,cx1
; xmm1= cty1,ctx1,cey1,cex1
if Ext >= SSE2
sub esp,8
shufps xmm1,xmm1,10110001b
shufps xmm3,xmm3,10110001b
movlps [esp],xmm1
else
push .tex_ptr
push dword .cty1
push .ctx1
end if
push dword .cz1
if Ext>=SSE2
sub esp,8
movlps [esp],xmm3
else
push dword .cty2
push .ctx2
end if
push dword .cz2
if Ext>=SSE2
sub esp,32
movhps [esp+24],xmm3
shufps xmm2,xmm2,10110001b
movlps [esp+16],xmm2
movhps [esp+8],xmm1
shufps xmm0,xmm0,10110001b
movlps [esp],xmm0 ;================================
 
else
push .z_buff
push .t_emap
push .t_bmap
push dword .cey2
push .cex2
push dword .cby2
1199,15 → 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
;end if
 
push .tex_ptr
push .z_buff
push .t_emap
push .t_bmap
 
push ecx
 
mov eax,.cx1
1226,28 → 1093,27
;-------------- edi - pointer to screen buffer
;stack - another parameters :
.y equ dword [ebp+4]
.bmap equ dword [ebp+8] ; bump map pointer
.emap equ dword [ebp+12] ; env map pointer
.z_buff equ dword [ebp+16] ; z buffer
.tex_map equ dword [ebp+20] ; texture pointer
 
.bx1 equ [ebp+24] ; ---
.by1 equ [ebp+28] ; |
.ex1 equ [ebp+32] ; |
.ey1 equ [ebp+36] ; |
.bx2 equ [ebp+40] ; |
.by2 equ [ebp+44] ; |> b. map and e. map coords
.ex2 equ [ebp+48] ; |> shifted shl ROUND
.ey2 equ [ebp+52] ; ---
.z2 equ [ebp+56]
.tx2 equ [ebp+60]
.ty2 equ [ebp+64]
.z1 equ [ebp+68]
.tx1 equ [ebp+72]
.ty1 equ [ebp+76]
.bx1 equ [ebp+8] ; ---
.by1 equ [ebp+12] ; |
.ex1 equ [ebp+16] ; |
.ey1 equ [ebp+20] ; |
.bx2 equ [ebp+24] ; |
.by2 equ [ebp+28] ; |> b. map and e. map coords
.ex2 equ [ebp+32] ; |> shifted shl ROUND
.ey2 equ [ebp+36] ; ---
.bmap equ [ebp+40] ; bump map offset
.emap equ [ebp+44] ; env map offset
.z_buff equ [ebp+48]
.z2 equ [ebp+52]
.tx2 equ [ebp+56]
.ty2 equ [ebp+60]
.z1 equ [ebp+64]
.tx1 equ [ebp+68]
.ty1 equ [ebp+72]
.tex_map equ dword [ebp+76] ; texture offset ( pointer )
 
 
 
.x1 equ [ebp-4]
.x2 equ [ebp-8]
.dbx equ [ebp-12]
1286,7 → 1152,7
jl .bl_ok
je .bl_end
 
 
xchg eax,ebx
if Ext=NON
mov edx,.bx1
xchg edx,.bx2
1333,51 → 1199,11
movq .tx1,mm1
movq .tx2,mm0
end if
;if Ext>=SSE2
; movaps xmm4,xmm0
; movaps xmm0,xmm2
; movaps xmm2,xmm4
; movaps xmm5,xmm1
; movaps xmm1,xmm3
; movaps xmm3,xmm5
;else
 
xchg eax,ebx
mov edx,.z1
xchg edx,.z2
mov .z1,edx
;end if
.bl_ok:
;if Ext >= SSE2
; shufps xmm0,xmm0,11100001b
; shufps xmm2,xmm2,11100001b
; movlps .bx1,xmm0
; movlps .bx2,xmm2
 
 
; shufps xmm0,xmm0,00011011b
; shufps xmm2,xmm2,00011011b
; movd eax,xmm0
; movd ebx,xmm2
; shufps xmm0,xmm0,11000110b
; shufps xmm2,xmm2,11000110b
; movd .z1,xmm0
; movd .z2,xmm2
; shufps xmm1,xmm1,10110001b
; shufps xmm3,xmm3,10110001b
; movlps .ex1,xmm1
; movlps .ex2,xmm2
; movhps .tx1,xmm1
; movhps .tx2,xmm2
 
; xchg eax,ebx
; mov edx,.z1
; xchg edx,.z2
; mov .z1,edx
 
 
;end if
 
push eax
push ebx ;store x1, x2
cmp dword .x1,SIZE_X
/programs/demos/3DS/3DMATH.INC
304,7 → 304,6
; ecx - number of points(normals)
;align 32
movups xmm4,[ebx]
; lddqu xmm4,[ebx] ; I tried sse3 :D
movups xmm5,[ebx+12]
movups xmm6,[ebx+24]
;align 32
/programs/demos/3DS/FLAT_CAT.INC
370,8 → 370,6
jecxz .draw_last
.ddraw:
cmp ebx,dword[esi]
; cmovl [edi],eax
; cmovl [esi],ebx
jge @f
stosd
dec edi