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 |