Subversion Repositories Kolibri OS

Rev

Rev 9237 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9237 Rev 9740
Line 35... Line 35...
35
 
35
 
36
.dx12  equ dword[ebp-16]
36
.dx12  equ dword[ebp-16]
37
.dz12  equ dword[ebp-20]
37
.dz12  equ dword[ebp-20]
38
.dc12r equ dword[ebp-24]
38
.dc12r equ dword[ebp-24]
39
.dc12g equ dword[ebp-28]
39
.dc12g equ dword[ebp-28]
Line 40... Line 40...
40
.dc12b equ dword[ebp-32]
40
.dc12b equ [ebp-32]
41
 
41
 
42
.dx13  equ dword[ebp-36]
42
.dx13  equ dword[ebp-36]
43
.dz13  equ dword[ebp-40]
43
.dz13  equ dword[ebp-40]
44
.dc13r equ dword[ebp-44]
44
.dc13r equ dword[ebp-44]
Line 45... Line 45...
45
.dc13g equ dword[ebp-48]
45
.dc13g equ dword[ebp-48]
46
.dc13b equ dword[ebp-52]
46
.dc13b equ [ebp-52]
47
 
47
 
48
.dx23  equ dword[ebp-56]
48
.dx23  equ dword[ebp-56]
49
.dz23  equ dword[ebp-60]
49
.dz23  equ dword[ebp-60]
Line 50... Line 50...
50
.dc23r equ dword[ebp-64]
50
.dc23r equ dword[ebp-64]
51
.dc23g equ dword[ebp-68]
51
.dc23g equ dword[ebp-68]
52
.dc23b equ dword[ebp-72]
52
.dc23b equ [ebp-72]
53
 
53
 
Line 122... Line 122...
122
     @@:
122
     @@:
123
       push	dword 0
123
       push     dword 0
124
       loop	@b
124
       loop     @b
125
       jmp	.gt_dx12_done
125
       jmp      .gt_dx12_done
126
  .gt_dx12_make:
126
  .gt_dx12_make:
-
 
127
 
-
 
128
if Ext>= SSE2
-
 
129
 
-
 
130
       movsx    ebx,bx
-
 
131
       mov      eax,1 shl 15
-
 
132
       cdq
-
 
133
       idiv     ebx
-
 
134
    ;   push     eax
-
 
135
       mov      ebx,eax
-
 
136
 
-
 
137
 
-
 
138
       mov      ax,.x2
-
 
139
       sub      ax,.x1
-
 
140
       cwde
-
 
141
       imul     ebx
-
 
142
       sar      eax,15 - ROUND
-
 
143
       push     eax
-
 
144
    ;   mov      .dx12,eax
-
 
145
 
-
 
146
       sub       esp,4*4
-
 
147
       movd      xmm0,ebx
-
 
148
       pshuflw   xmm0,xmm0,0
-
 
149
       movq      xmm1,[.col1r]
-
 
150
       movq      xmm2,[.col2r]
-
 
151
       psubw     xmm2,xmm1
-
 
152
       movdqa    xmm3,xmm2
-
 
153
       pmullw    xmm2,xmm0
-
 
154
       pmulhw    xmm3,xmm0
-
 
155
       punpcklwd xmm2,xmm3
-
 
156
       psrad     xmm2,15 - ROUND
-
 
157
       pshufd    xmm2,xmm2,11000110b
-
 
158
       movdqu    .dc12b,xmm2
-
 
159
else
127
       mov	ax,.x2
160
       mov      ax,.x2
128
       sub	ax,.x1
161
       sub      ax,.x1
129
       cwde
162
       cwde
130
       movsx	ebx,bx
163
       movsx    ebx,bx
131
       shl	eax,ROUND
164
       shl      eax,ROUND
Line 164... Line 197...
164
       shl	eax,ROUND
197
       shl      eax,ROUND
165
       cdq
198
       cdq
166
       idiv	ebx
199
       idiv     ebx
167
      ; mov .dc12b,eax
200
      ; mov .dc12b,eax
168
       push	eax
201
       push     eax
-
 
202
end if
169
   .gt_dx12_done:
203
   .gt_dx12_done:
Line 170... Line 204...
170
 
204
 
171
       mov	bx,.y3	     ; calc deltas
205
       mov      bx,.y3       ; calc deltas
172
       sub	bx,.y1
206
       sub      bx,.y1
Line 180... Line 214...
180
     @@:
214
     @@:
181
       push	dword 0
215
       push     dword 0
182
       loop	@b
216
       loop     @b
183
       jmp	.gt_dx13_done
217
       jmp      .gt_dx13_done
184
    .gt_dx13_make:
218
    .gt_dx13_make:
-
 
219
 
-
 
220
if Ext>= SSE2
-
 
221
 
-
 
222
       movsx    ebx,bx
-
 
223
       mov      eax,1 shl 15
-
 
224
       cdq
-
 
225
       idiv     ebx
-
 
226
       mov      ebx,eax
-
 
227
 
-
 
228
 
-
 
229
       mov      ax,.x3
-
 
230
       sub      ax,.x1
-
 
231
       cwde
-
 
232
       imul     ebx
-
 
233
       sar      eax,15 - ROUND
-
 
234
       push     eax
-
 
235
 
-
 
236
       sub       esp,4*4
-
 
237
       movd      xmm0,ebx
-
 
238
       pshuflw   xmm0,xmm0,0
-
 
239
       movq      xmm1,[.col1r]
-
 
240
       movq      xmm2,[.col3r]
-
 
241
       psubw     xmm2,xmm1
-
 
242
       movdqa    xmm3,xmm2
-
 
243
       pmullw    xmm2,xmm0
-
 
244
       pmulhw    xmm3,xmm0
-
 
245
       punpcklwd xmm2,xmm3
-
 
246
       psrad     xmm2,15 - ROUND
-
 
247
       pshufd    xmm2,xmm2,11000110b
-
 
248
       movdqu    .dc13b,xmm2
-
 
249
else
-
 
250
 
185
       mov	ax,.x3
251
       mov      ax,.x3
186
       sub	ax,.x1
252
       sub      ax,.x1
187
       cwde
253
       cwde
188
       movsx	ebx,bx
254
       movsx    ebx,bx
189
       shl	eax,ROUND
255
       shl      eax,ROUND
Line 222... Line 288...
222
       shl	eax,ROUND
288
       shl      eax,ROUND
223
       cdq
289
       cdq
224
       idiv	ebx
290
       idiv     ebx
225
      ; mov .dc13b,eax
291
      ; mov .dc13b,eax
226
       push	eax
292
       push     eax
-
 
293
end if
227
   .gt_dx13_done:
294
   .gt_dx13_done:
Line 228... Line 295...
228
 
295
 
229
       mov	bx,.y3	     ; calc deltas
296
       mov      bx,.y3       ; calc deltas
230
       sub	bx,.y2
297
       sub      bx,.y2
Line 238... Line 305...
238
     @@:
305
     @@:
239
       push	dword 0
306
       push     dword 0
240
       loop	@b
307
       loop     @b
241
       jmp	.gt_dx23_done
308
       jmp      .gt_dx23_done
242
    .gt_dx23_make:
309
    .gt_dx23_make:
-
 
310
 
-
 
311
if Ext>= SSE2
-
 
312
 
-
 
313
       movsx    ebx,bx
-
 
314
       mov      eax,1 shl 15
-
 
315
       cdq
-
 
316
       idiv     ebx
-
 
317
    ;   push     eax
-
 
318
       mov      ebx,eax
-
 
319
 
-
 
320
       mov      ax,.x3
-
 
321
       sub      ax,.x2
-
 
322
       cwde
-
 
323
       imul     ebx
-
 
324
       sar      eax,15 - ROUND
-
 
325
       push     eax
-
 
326
 
-
 
327
       sub       esp,4*4
-
 
328
       movd      xmm0,ebx
-
 
329
       pshuflw   xmm0,xmm0,0
-
 
330
       movq      xmm1,[.col2r]
-
 
331
       movq      xmm2,[.col3r]
-
 
332
       psubw     xmm2,xmm1
-
 
333
       movdqa    xmm3,xmm2
-
 
334
       pmullw    xmm2,xmm0
-
 
335
       pmulhw    xmm3,xmm0
-
 
336
       punpcklwd xmm2,xmm3
-
 
337
       psrad     xmm2,15 - ROUND
-
 
338
       pshufd    xmm2,xmm2,11000110b
-
 
339
       movdqu    .dc23b,xmm2
-
 
340
else
-
 
341
 
-
 
342
 
243
       mov	ax,.x3
343
       mov      ax,.x3
244
       sub	ax,.x2
344
       sub      ax,.x2
245
       cwde
345
       cwde
246
       movsx	ebx,bx
346
       movsx    ebx,bx
247
       shl	eax,ROUND
347
       shl      eax,ROUND
Line 280... Line 380...
280
       shl	eax,ROUND
380
       shl      eax,ROUND
281
       cdq
381
       cdq
282
       idiv	ebx
382
       idiv     ebx
283
      ; mov .dc23b,eax
383
      ; mov .dc23b,eax
284
       push	eax
384
       push     eax
-
 
385
end if
285
   .gt_dx23_done:
386
   .gt_dx23_done:
286
       sub	esp,32
387
       sub      esp,32
Line 287... Line 388...
287
 
388
 
288
       movsx	eax,.x1 		   ; eax - cur x1
389
       movsx    eax,.x1                    ; eax - cur x1
Line 338... Line 439...
338
       push	.zz2
439
       push     .zz2
339
       push	.zz1
440
       push     .zz1
340
       call	gouraud_line_z
441
       call     gouraud_line_z
Line 341... Line 442...
341
 
442
 
-
 
443
       popad
342
       popad
444
 
343
if Ext >= MMX
445
if Ext >= MMX
344
       movq	mm0,.c1bM
446
       movq     mm0,.c1bM
345
       paddd	mm0,qword .dc13bM
447
       paddd    mm0,qword .dc13bM
346
       movq	.c1bM,mm0
448
       movq     .c1bM,mm0
Line 481... Line 583...
481
;----------------- stack:
583
;----------------- stack:
482
.z1  equ dword[ebp+4]	; z coordiunate shifted left CATMULL_SHIFT
584
.z1  equ dword[ebp+4]   ; z coordiunate shifted left CATMULL_SHIFT
483
.z2  equ dword[ebp+8]
585
.z2  equ dword[ebp+8]
484
.y   equ word[ebp+12]
586
.y   equ word[ebp+12]
485
.x1  equ ebp+14
587
.x1  equ ebp+14
-
 
588
 
486
.c1b equ ebp+16
589
.c1b equ ebp+16
487
.c1g equ ebp+18
590
.c1g equ ebp+18
488
.c1r equ ebp+20
591
.c1r equ ebp+20
489
.x2  equ ebp+22
592
.x2  equ ebp+22
490
.c2b equ ebp+24
593
.c2b equ ebp+24
Line 538... Line 641...
538
	cmp	word[.x1],bx  ;SIZE_X
641
        cmp     word[.x1],bx  ;SIZE_X
539
	jge	.gl_quit
642
        jge     .gl_quit
540
	cmp	word[.x2],0
643
        cmp     word[.x2],0
541
	jle	.gl_quit
644
        jle     .gl_quit
Line -... Line 645...
-
 
645
 
-
 
646
if 0
-
 
647
       mov     bx,word[.x2]      ; dz = z2-z1/x2-x1
-
 
648
       sub     bx,word[.x1]
-
 
649
       movsx   ebx,bx
-
 
650
 
-
 
651
 
-
 
652
       mov      eax,1 shl 15
-
 
653
       cdq
-
 
654
       idiv     ebx
-
 
655
       mov      ebx,eax
-
 
656
 
-
 
657
 
-
 
658
       mov      eax,.x3
-
 
659
       sub      eax,.x1
-
 
660
       cwde
-
 
661
       imul     ebx
-
 
662
       sar      eax,15 - ROUND
-
 
663
       push     eax
-
 
664
 
-
 
665
       sub       esp,4*4
-
 
666
       movd      xmm0,ebx
-
 
667
       pshuflw   xmm0,xmm0,0
-
 
668
       movq      xmm1,[.col1r]
-
 
669
       movq      xmm2,[.col3r]
-
 
670
       psubw     xmm2,xmm1
-
 
671
       movdqa    xmm3,xmm2
-
 
672
       pmullw    xmm2,xmm0
-
 
673
       pmulhw    xmm3,xmm0
-
 
674
       punpcklwd xmm2,xmm3
-
 
675
       psrad     xmm2,15 - ROUND
-
 
676
       pshufd    xmm2,xmm2,11000110b
-
 
677
       movdqu    .dc13b,xmm2
-
 
678
 
-
 
679
 
-
 
680
end if
-
 
681
 
542
 
682
 
543
	mov	eax,.z2
683
        mov     eax,.z2
544
	sub	eax,.z1
684
        sub     eax,.z1
545
	cdq
685
        cdq
546
	mov	bx,word[.x2]	  ; dz = z2-z1/x2-x1
686
        mov     bx,word[.x2]      ; dz = z2-z1/x2-x1
547
	sub	bx,word[.x1]
687
        sub     bx,word[.x1]
548
	movsx	ebx,bx
688
        movsx   ebx,bx
549
	idiv	ebx
689
        idiv    ebx
Line -... Line 690...
-
 
690
        push    eax
-
 
691
 
-
 
692
 
-
 
693
        mov      eax,1 shl 15
-
 
694
        cdq
-
 
695
        idiv     ebx
-
 
696
        mov      ebx,eax
550
	push	eax
697
 
551
 
698
 
552
	mov	ax,word[.c2b]
699
        mov     ax,word[.c2b]
553
	sub	ax,word[.c1b]
700
        sub     ax,word[.c1b]
554
	cwde
-
 
555
	shl	eax,ROUND
701
        cwde
556
	cdq
702
        imul     ebx
Line -... Line 703...
-
 
703
        sar      eax,15 - ROUND
557
	idiv	ebx
704
        push     eax
558
	push	eax
705
 
559
 
706
 
560
	mov	ax,word[.c2g]
707
        mov     ax,word[.c2g]
561
	sub	ax,word[.c1g]
-
 
562
	cwde
708
        sub     ax,word[.c1g]
563
	shl	eax,ROUND
709
        cwde
Line -... Line 710...
-
 
710
        imul     ebx
-
 
711
        sar      eax,15 - ROUND
564
	cdq
712
        push     eax
565
	idiv	ebx
713
 
566
	push	eax
714
 
567
 
715
 
568
	mov	ax,word[.c2r]
-
 
569
	sub	ax,word[.c1r]
716
        mov     ax,word[.c2r]
570
	cwde
717
        sub     ax,word[.c1r]
Line 571... Line 718...
571
	shl	eax,ROUND	  ; dc_r = c2r-c1r/x2-x1
718
        cwde
572
	cdq
719
        imul     ebx
573
	idiv	ebx
720
        sar      eax,15 - ROUND
Line 623... Line 770...
623
	mov	ebx,.z1 	 ; ebx - currrent z shl CATMULL_SIFT
770
        mov     ebx,.z1          ; ebx - currrent z shl CATMULL_SIFT
624
;if Ext >= SSE
771
;if Ext >= SSE
625
;        mov     .cz,edx
772
;        mov     .cz,edx
626
;end if
773
;end if
627
	mov	edx,.dz 	 ; edx - delta z
774
        mov     edx,.dz          ; edx - delta z
-
 
775
if Ext >= SSE2
-
 
776
        movq      xmm7,[.c1b]
-
 
777
        pshuflw   xmm7,xmm7,11000110b
-
 
778
        punpcklwd xmm7,[the_zero]
-
 
779
        pslld     xmm7,ROUND
-
 
780
        movdqu    xmm1,[.dc_rM]
-
 
781
end if
-
 
782
if Ext = NON
628
	movzx	eax,word[.c1r]
783
        movzx   eax,word[.c1r]
629
	shl	eax,ROUND
784
        shl     eax,ROUND
630
	mov	.cr,eax
785
        mov     .cr,eax
631
	movzx	eax,word[.c1g]
786
        movzx   eax,word[.c1g]
632
	shl	eax,ROUND
787
        shl     eax,ROUND
633
	mov	.cg,eax
788
        mov     .cg,eax
634
	movzx	eax,word[.c1b]
789
        movzx   eax,word[.c1b]
635
	shl	eax,ROUND
790
        shl     eax,ROUND
636
	mov	.cb,eax
791
        mov     .cb,eax
-
 
792
end if
637
if Ext = MMX
793
if (Ext = MMX) | (Ext=SSE)
638
;        mov     .c_z,edx
794
;        mov     .c_z,edx
639
	movd	mm2,[.dc_bM]	     ; delta color blue MMX
795
        movd    mm2,[.dc_bM]         ; delta color blue MMX
640
	movd	mm3,[.cbM]	     ; current blue MMX
796
        movd    mm3,[.cbM]           ; current blue MMX
641
	movq	mm5,[.dc_rM]
797
        movq    mm5,[.dc_rM]
642
	movq	mm4,[.crM]
798
        movq    mm4,[.crM]
Line 650... Line 806...
650
;        psrsq   mm0,32
806
;        psrsq   mm0,32
651
;        movd    ebx,mm0
807
;        movd    ebx,mm0
652
;end if
808
;end if
653
	cmp	ebx,dword[esi]	 ; esi - z_buffer
809
        cmp     ebx,dword[esi]   ; esi - z_buffer
654
	jge	@f		 ; edi - Screen buffer
810
        jge     @f               ; edi - Screen buffer
655
if Ext = MMX
811
if Ext >= SSE2
-
 
812
        movdqa   xmm0,xmm7
-
 
813
        psrld    xmm0,ROUND
-
 
814
        packssdw xmm0,xmm0
-
 
815
        packuswb xmm0,xmm0
-
 
816
        movd     eax,xmm0
-
 
817
        stosw
-
 
818
        shr      eax,16
-
 
819
        stosb
-
 
820
end if
-
 
821
if (Ext=MMX) | (Ext=SSE)
656
	movq	mm0,mm3 	 ; mm0, mm1 - temp registers
822
        movq    mm0,mm3          ; mm0, mm1 - temp registers
657
	psrld	mm0,ROUND
823
        psrld   mm0,ROUND
658
	movq	mm1,mm4
824
        movq    mm1,mm4
659
	psrld	mm1,ROUND
825
        psrld   mm1,ROUND
660
	packssdw  mm1,mm0
826
        packssdw  mm1,mm0
Line 662... Line 828...
662
;        movd     [edi],mm1
828
;        movd     [edi],mm1
663
	movd	  eax,mm1
829
        movd      eax,mm1
664
	stosw
830
        stosw
665
	shr	  eax,16
831
        shr       eax,16
666
	stosb
832
        stosb
667
else
833
end if
-
 
834
if Ext=NON
668
	mov	eax,.cr
835
        mov     eax,.cr
669
	sar	eax,ROUND
836
        sar     eax,ROUND
670
	stosb
837
        stosb
671
	mov	eax,.cg
838
        mov     eax,.cg
672
	sar	eax,ROUND
839
        sar     eax,ROUND
Line 684... Line 851...
684
      .no_skip:
851
      .no_skip:
685
	add	esi,4
852
        add     esi,4
686
;if Ext=NON
853
;if Ext=NON
687
	add	ebx,edx
854
        add     ebx,edx
688
;end if
855
;end if
689
if Ext=MMX
856
if Ext >=SSE2
-
 
857
        paddd   xmm7,xmm1
-
 
858
end if
-
 
859
if (Ext=MMX) | (Ext=SSE)
690
	paddd	mm3,mm2
860
        paddd   mm3,mm2
691
	paddd	mm4,mm5
861
        paddd   mm4,mm5
692
else
862
end if
-
 
863
if Ext = NON
693
	mov	eax,.dc_g
864
        mov     eax,.dc_g
694
	add	.cg,eax
865
        add     .cg,eax
695
	mov	eax,.dc_b
866
        mov     eax,.dc_b
696
	add	.cb,eax
867
        add     .cb,eax
697
	mov	eax,.dc_r
868
        mov     eax,.dc_r