Rev 1776 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1245 | hidnplayr | 1 | |
2 | ;TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1 |
||
3 | ;ROUND equ 8 |
||
4 | ;Ext = NON |
||
5 | ;MMX = 1 |
||
6 | ;NON = 0 |
||
7 | ;------- Big thanks to Majuma (www.majuma.xt.pl) for absolutely great--- |
||
8 | ;------- DOS 13h mode demos -------------------------------------------- |
||
9 | ;------- Procedure draws bump triangle with texture, I use ------------- |
||
10 | ;--------Catmull Z-buffer algorithm- (Z coordinate interpolation)------- |
||
11 | ;--------I calc texture pixel by this way: col1*col2/256 --------------- |
||
12 | bump_tex_triangle_z: |
||
13 | ;------------------in - eax - x1 shl 16 + y1 ----------- |
||
14 | ;---------------------- ebx - x2 shl 16 + y2 ----------- |
||
15 | ;---------------------- ecx - x3 shl 16 + y3 ----------- |
||
16 | ;---------------------- edx - pointer to bump map------- |
||
17 | ;---------------------- esi - pointer to env map-------- |
||
18 | ;---------------------- edi - pointer to screen buffer-- |
||
19 | ;---------------------- stack : bump coordinates-------- |
||
20 | ;---------------------- environment coordinates- |
||
21 | ;---------------------- Z position coordinates-- |
||
22 | ;---------------------- pointer to Z buffer----- |
||
23 | ;---------------------- pointer to texture------ |
||
24 | ;---------------------- texture coordinates----- |
||
25 | ;-- Z-buffer - filled with coordinates as dword -------- |
||
26 | ;-- (Z coor. as word) shl CATMULL_SHIFT ---------------- |
||
27 | .b_x1 equ ebp+4 ; procedure don't save registers !!! |
||
28 | .b_y1 equ ebp+6 ; each coordinate as word |
||
29 | .b_x2 equ ebp+8 |
||
30 | .b_y2 equ ebp+10 ; b - bump map coords |
||
31 | .b_x3 equ ebp+12 ; e - env map coords |
||
32 | .b_y3 equ ebp+14 |
||
33 | .e_x1 equ ebp+16 |
||
34 | .e_y1 equ ebp+18 |
||
35 | .e_x2 equ ebp+20 |
||
36 | .e_y2 equ ebp+22 |
||
37 | .e_x3 equ ebp+24 |
||
38 | .e_y3 equ ebp+26 |
||
39 | .z1 equ word[ebp+28] |
||
40 | .z2 equ word[ebp+30] |
||
41 | .z3 equ word[ebp+32] |
||
42 | .z_buff equ dword[ebp+34] ; pointer to Z-buffer |
||
43 | .tex_ptr equ dword[ebp+38] ; ptr to texture |
||
44 | .t_x1 equ ebp+42 ; texture coords |
||
45 | .t_y1 equ ebp+44 |
||
46 | .t_x2 equ ebp+46 |
||
47 | .t_y2 equ ebp+48 |
||
48 | .t_x3 equ ebp+50 |
||
49 | .t_y3 equ ebp+52 |
||
50 | |||
51 | |||
52 | |||
53 | |||
54 | .t_emap equ dword[ebp-8] ; pointer to env map |
||
55 | .x1 equ word[ebp-10] |
||
56 | .y1 equ word[ebp-12] |
||
57 | .x2 equ word[ebp-14] |
||
58 | .y2 equ word[ebp-16] |
||
59 | .x3 equ word[ebp-18] |
||
60 | .y3 equ word[ebp-20] |
||
61 | |||
62 | |||
63 | .dz12 equ [ebp-28] |
||
64 | .dbx12 equ dword[ebp-32] |
||
65 | .dby12 equ [ebp-36] |
||
66 | .dex12 equ dword[ebp-40] |
||
67 | .dey12 equ [ebp-44] |
||
68 | .dtx12 equ dword[ebp-48] |
||
69 | .dty12 equ [ebp-52] |
||
70 | |||
71 | |||
72 | .dz13 equ [ebp-52-4*2] |
||
73 | .dbx13 equ dword[ebp-52-4*3] |
||
74 | .dby13 equ [ebp-52-4*4] |
||
75 | .dex13 equ dword[ebp-52-4*5] |
||
76 | .dey13 equ [ebp-52-4*6] |
||
77 | .dtx13 equ dword[ebp-52-4*7] |
||
78 | .dty13 equ [ebp-52-4*8] |
||
79 | |||
80 | |||
81 | |||
82 | .dz23 equ [ebp-(52+4*10)] |
||
83 | .dbx23 equ dword[ebp-(52+4*11)] |
||
84 | .dby23 equ [ebp-(52+4*12)] |
||
85 | .dex23 equ dword[ebp-(52+4*13)] |
||
86 | .dey23 equ [ebp-(52+4*14)] |
||
87 | .dtx23 equ dword[ebp-(52+4*15)] |
||
88 | .dty23 equ [ebp-(52+4*16)] |
||
89 | |||
90 | |||
1819 | yogev_ezra | 91 | |
92 | |||
1245 | hidnplayr | 93 | .cz1 equ [ebp-(52+4*18)] |
94 | .cx2 equ dword[ebp-(52+4*19)] |
||
95 | .cz2 equ [ebp-(52+4*20)] |
||
96 | .cbx1 equ dword[ebp-(52+4*21)] |
||
97 | .cby1 equ [ebp-(52+4*22)] |
||
98 | .cbx2 equ dword[ebp-(52+4*23)] |
||
99 | .cby2 equ [ebp-(52+4*24)] |
||
100 | .cex1 equ dword[ebp-(52+4*25)] |
||
101 | .cey1 equ [ebp-(52+4*26)] |
||
102 | .cex2 equ dword[ebp-(52+4*27)] |
||
103 | .cey2 equ [ebp-(52+4*28)] |
||
104 | |||
105 | |||
106 | .cty1 equ [ebp-(52+4*30)] |
||
107 | .ctx2 equ dword[ebp-(52+4*31)] |
||
108 | .cty2 equ [ebp-(52+4*32)] |
||
109 | |||
110 | |||
1819 | yogev_ezra | 111 | |
112 | |||
113 | .cz1 equ [ebp-(52+4*18)] |
||
114 | .cbx1 equ dword[ebp-(52+4*19)] |
||
115 | .cby1 equ [ebp-(52+4*20)] |
||
116 | .cex1 equ dword[ebp-(52+4*21)] |
||
117 | .cey1 equ [ebp-(52+4*22)] |
||
118 | .ctx1 equ dword[ebp-(52+4*23)] |
||
119 | .cty1 equ [ebp-(52+4*24)] |
||
120 | |||
121 | |||
122 | .cz2 equ [ebp-(52+4*26)] |
||
123 | .cbx2 equ dword[ebp-(52+4*27)] |
||
124 | .cby2 equ [ebp-(52+4*28)] |
||
125 | .cex2 equ dword[ebp-(52+4*29)] |
||
126 | .cey2 equ [ebp-(52+4*30)] |
||
127 | .ctx2 equ dword[ebp-(52+4*31)] |
||
128 | .cty2 equ [ebp-(52+4*32)] |
||
129 | |||
130 | |||
131 | cld |
||
1245 | hidnplayr | 132 | mov ebp,esp |
133 | push edx ; store bump map |
||
134 | push esi ; store e. map |
||
135 | ; sub esp,120 |
||
136 | .sort3: ; sort triangle coordinates... |
||
137 | cmp ax,bx |
||
138 | jle .sort1 |
||
139 | xchg eax,ebx |
||
140 | mov edx,dword[.b_x1] |
||
141 | xchg edx,dword[.b_x2] |
||
142 | mov dword[.b_x1],edx |
||
143 | mov edx,dword[.e_x1] |
||
144 | xchg edx,dword[.e_x2] |
||
145 | mov dword[.e_x1],edx |
||
146 | mov edx,dword[.t_x1] |
||
147 | xchg edx,dword[.t_x2] |
||
148 | mov dword[.t_x1],edx |
||
149 | mov dx,.z1 |
||
150 | xchg dx,.z2 |
||
151 | mov .z1,dx |
||
152 | .sort1: |
||
153 | cmp bx,cx |
||
154 | jle .sort2 |
||
155 | xchg ebx,ecx |
||
156 | mov edx,dword[.b_x2] |
||
157 | xchg edx,dword[.b_x3] |
||
158 | mov dword[.b_x2],edx |
||
159 | mov edx,dword[.e_x2] |
||
160 | xchg edx,dword[.e_x3] |
||
161 | mov dword[.e_x2],edx |
||
162 | mov edx,dword[.t_x2] |
||
163 | xchg edx,dword[.t_x3] |
||
164 | mov dword[.t_x2],edx |
||
165 | mov dx,.z2 |
||
166 | xchg dx,.z3 |
||
167 | mov .z2,dx |
||
168 | jmp .sort3 |
||
169 | .sort2: |
||
170 | push eax ; store triangle coords in variables |
||
171 | push ebx |
||
172 | push ecx |
||
173 | mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that |
||
174 | and edx,ebx ; if *all* of them are negative a sign flag is raised |
||
175 | and edx,ecx |
||
176 | and edx,eax |
||
177 | test edx,80008000h ; Check both X&Y at once |
||
178 | jne .loop23_done |
||
179 | ; mov edx,eax ; eax,ebx,ecx are ORd together into edx which means that |
||
180 | ; or edx,ebx ; if any *one* of them is negative a sign flag is raised |
||
181 | ; or edx,ecx |
||
182 | ; test edx,80000000h ; Check only X |
||
183 | ; jne .loop23_done |
||
184 | |||
185 | |||
186 | ; jg .loop23_done |
||
187 | ; cmp .x2,SIZE_X ; This can be optimized with effort |
||
188 | ; jg .loop23_done |
||
189 | ; cmp .x3,SIZE_X |
||
190 | ; jg .loop23_done ; { |
||
191 | |||
192 | |||
193 | |||
194 | sub bx,.y1 |
||
195 | jnz .bt_dx12_make |
||
196 | mov ecx,8 |
||
197 | xor edx,edx |
||
198 | @@: |
||
199 | push edx ;dword 0 |
||
200 | loop @b |
||
201 | jmp .bt_dx12_done |
||
202 | .bt_dx12_make: |
||
203 | movsx ebx,bx |
||
1776 | yogev_ezra | 204 | |
1245 | hidnplayr | 205 | |
206 | |||
207 | sub esp,32 |
||
1819 | yogev_ezra | 208 | ; mov eax,256 |
1245 | hidnplayr | 209 | cvtsi2ss xmm4,[i255d] |
210 | cvtsi2ss xmm3,ebx ;rcps |
||
211 | divss xmm3,xmm4 |
||
212 | shufps xmm3,xmm3,0 |
||
213 | |||
214 | |||
215 | movd mm1,[.b_x2] |
||
216 | movd mm2,[.e_x1] |
||
217 | movd mm3,[.e_x2] |
||
218 | |||
219 | |||
220 | punpcklwd mm0,mm4 |
||
221 | punpcklwd mm1,mm4 |
||
222 | punpcklwd mm2,mm4 |
||
223 | punpcklwd mm3,mm4 |
||
224 | |||
225 | |||
226 | psubd mm3,mm2 |
||
227 | |||
228 | |||
229 | movlhps xmm1,xmm1 |
||
230 | cvtpi2ps xmm1,mm3 |
||
231 | |||
232 | |||
233 | |||
234 | |||
235 | ;xmm1--> | dbx | dby | dex | dey | |
||
236 | ;1 movups .dey12,xmm1 |
||
1819 | yogev_ezra | 237 | cvtps2pi mm0,xmm1 ;mm0,xmm1 ; mm0 -> 2 delta dwords |
1776 | yogev_ezra | 238 | movhlps xmm1,xmm1 |
1245 | hidnplayr | 239 | cvtps2pi mm1,xmm1 ;mm1,xmm1 |
1776 | yogev_ezra | 240 | movq .dey12,mm0 |
1245 | hidnplayr | 241 | movq .dby12,mm1 |
242 | ;------------- |
||
243 | ; pxor mm0,mm0 |
||
1776 | yogev_ezra | 244 | ; pxor mm1,mm1 |
245 | ;/ pinsrw mm0,.z1,1 |
||
246 | ;/ pinsrw mm0,.x1,0 |
||
247 | ;/ pinsrw mm1,.z2,1 |
||
248 | ;/ pinsrw mm1,.x2,0 |
||
249 | mov ax,.z2 |
||
250 | sub ax,.z1 |
||
251 | cwde |
||
252 | |||
1819 | yogev_ezra | 253 | |
254 | sub dx,.x1 |
||
255 | movsx edx,dx |
||
256 | |||
257 | |||
1776 | yogev_ezra | 258 | |
259 | |||
260 | ;/ punpcklwd mm1,mm4 |
||
261 | |||
262 | |||
263 | ; cvtpi2ps xmm2,mm0 |
||
264 | ; subps xmm1,xmm2 |
||
265 | |||
266 | |||
267 | |||
268 | |||
269 | movd mm3,[.t_x2] |
||
270 | |||
271 | |||
272 | punpcklwd mm3,mm4 |
||
273 | psubd mm3,mm2 |
||
274 | |||
275 | |||
276 | cvtsi2ss xmm1,eax |
||
277 | movlhps xmm1,xmm1 |
||
278 | cvtsi2ss xmm1,edx |
||
1819 | yogev_ezra | 279 | ; movss xmm1,xmm4 |
280 | shufps xmm1,xmm1,00101111b |
||
281 | cvtpi2ps xmm1,mm3 |
||
1776 | yogev_ezra | 282 | |
283 | |||
1819 | yogev_ezra | 284 | |
1776 | yogev_ezra | 285 | |
286 | ; xmm1--> | dx | dz | dtx | dty | |
||
1819 | yogev_ezra | 287 | ;1 movlps .dty12,xmm1 |
288 | ;1 movhps .dz12,xmm1 |
||
289 | cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords | dtx | dty | |
||
1776 | yogev_ezra | 290 | movhlps xmm1,xmm1 |
291 | cvtps2pi mm1,xmm1 |
||
1819 | yogev_ezra | 292 | movq .dty12,mm0 |
1776 | yogev_ezra | 293 | movq .dz12,mm1 |
1819 | yogev_ezra | 294 | ;temporaly conversion to keep upside down |
295 | ; fninit |
||
296 | ; fld .dx12 |
||
297 | ; fistp .dx12 |
||
298 | ; fld dword .dz12 |
||
299 | ; fistp dword .dz12 |
||
300 | ; fld .dbx12 |
||
301 | ; fistp .dbx12 |
||
302 | ; fld dword .dby12 |
||
303 | ; fistp dword .dby12 |
||
304 | ; fld .dex12 |
||
305 | ; fistp .dex12 |
||
306 | ; fld dword .dey12 |
||
307 | ; fistp dword .dey12 |
||
308 | ; fld .dtx12 |
||
309 | ; fistp .dtx12 |
||
310 | ; fld dword .dty12 |
||
311 | ; fistp dword .dty12 |
||
312 | ;---- |
||
1776 | yogev_ezra | 313 | ; mov ax,.z2 |
1245 | hidnplayr | 314 | ; sub ax,.z1 |
315 | ; cwde |
||
316 | ; mov bx,.x2 |
||
317 | ; sub bx,.x1 |
||
318 | ; movsx ebx,bx |
||
319 | ; movd mm1,eax |
||
320 | ; psllq mm1,32 |
||
321 | ; movd mm1,ebx |
||
322 | |||
1776 | yogev_ezra | 323 | |
1245 | hidnplayr | 324 | ;; push eax |
325 | ;; movq mm1,[esp] |
||
326 | ;; add esp,8 |
||
327 | ;;; mov ax,.z1 |
||
328 | ;;; mov bx,.z2 |
||
329 | ;;; shl eax,16 |
||
330 | ;;; shl ebx,16 |
||
331 | ;;; mov ax,.x1 |
||
332 | ;;; mov bx,.x2 |
||
333 | ; movd mm2,[.t_x1] |
||
334 | ; movd mm3,[.t_x2] |
||
335 | ;; movd mm0,eax |
||
336 | ;; movd mm1,ebx |
||
337 | |||
338 | |||
339 | ;; punpcklwd mm0,mm4 |
||
340 | ;; punpcklwd mm1,mm4 |
||
341 | ; punpcklwd mm2,mm4 |
||
342 | ; punpcklwd mm3,mm4 |
||
343 | |||
344 | |||
345 | ; psubd mm3,mm2 |
||
346 | |||
347 | |||
348 | |||
349 | ; movlhps xmm1,xmm1 |
||
350 | ; cvtpi2ps xmm1,mm3 |
||
351 | |||
352 | |||
353 | |||
354 | |||
355 | ; xmm1--> | dx | dz | dtx | dty | |
||
356 | ; cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords | dtx | dty | |
||
357 | ; movhlps xmm1,xmm1 |
||
358 | ; cvtps2pi mm1,xmm1 ; mm1 --> 2 delta dwords | dx | dz | |
||
359 | ; movq .dty12,mm0 |
||
360 | ; movq .dz12,mm1 |
||
361 | else |
||
362 | mov ax,.x2 |
||
1819 | yogev_ezra | 363 | sub ax,.x1 |
364 | cwde |
||
365 | shl eax,ROUND |
||
366 | cdq |
||
367 | idiv ebx |
||
368 | ; mov .dx12,eax |
||
369 | push eax |
||
370 | |||
371 | |||
1776 | yogev_ezra | 372 | sub ax,.z1 |
373 | cwde |
||
374 | shl eax,CATMULL_SHIFT |
||
375 | cdq |
||
376 | idiv ebx |
||
377 | push eax |
||
378 | |||
1245 | hidnplayr | 379 | |
380 | sub ax,word[.b_x1] |
||
381 | cwde |
||
382 | shl eax,ROUND |
||
383 | cdq |
||
384 | idiv ebx |
||
385 | ; mov .dbx12,eax |
||
386 | push eax |
||
387 | |||
388 | |||
389 | sub ax,word[.b_y1] |
||
390 | cwde |
||
391 | shl eax,ROUND |
||
392 | cdq |
||
393 | idiv ebx |
||
394 | ; mov .dby12,eax |
||
395 | push eax |
||
396 | |||
397 | |||
398 | sub ax,word[.e_x1] |
||
399 | cwde |
||
400 | shl eax,ROUND |
||
401 | cdq |
||
402 | idiv ebx |
||
403 | ; mov .dex12,eax |
||
404 | push eax |
||
405 | |||
406 | |||
407 | sub ax,word[.e_y1] |
||
408 | cwde |
||
409 | shl eax,ROUND |
||
410 | cdq |
||
411 | idiv ebx |
||
412 | ; mov .dey12,eax |
||
413 | push eax |
||
414 | |||
415 | |||
416 | sub ax,word[.t_x1] |
||
417 | cwde |
||
418 | shl eax,ROUND |
||
419 | cdq |
||
420 | idiv ebx |
||
421 | ; mov .dtx12,eax |
||
422 | push eax |
||
423 | |||
424 | |||
425 | sub ax,word[.t_y1] |
||
426 | cwde |
||
427 | shl eax,ROUND |
||
428 | cdq |
||
429 | idiv ebx |
||
430 | ; mov .dty12,eax |
||
431 | push eax |
||
432 | end if |
||
1776 | yogev_ezra | 433 | .bt_dx12_done: |
1245 | hidnplayr | 434 | |
435 | |||
436 | sub bx,.y1 |
||
437 | jnz .bt_dx13_make |
||
438 | mov ecx,8 |
||
439 | xor edx,edx |
||
440 | @@: |
||
441 | push edx ;dword 0 |
||
442 | loop @b |
||
443 | jmp .bt_dx13_done |
||
444 | .bt_dx13_make: |
||
445 | movsx ebx,bx |
||
446 | |||
447 | |||
448 | |||
449 | |||
1819 | yogev_ezra | 450 | ; mov eax,256 |
451 | cvtsi2ss xmm4,[i255d] |
||
1245 | hidnplayr | 452 | cvtsi2ss xmm3,ebx ;rcps |
453 | divss xmm3,xmm4 |
||
454 | shufps xmm3,xmm3,0 |
||
455 | |||
456 | |||
457 | movd mm1,[.b_x3] |
||
458 | movd mm2,[.e_x1] |
||
459 | movd mm3,[.e_x3] |
||
460 | |||
461 | |||
462 | punpcklwd mm0,mm4 |
||
463 | punpcklwd mm1,mm4 |
||
464 | punpcklwd mm2,mm4 |
||
465 | punpcklwd mm3,mm4 |
||
466 | |||
467 | |||
468 | psubd mm3,mm2 |
||
469 | |||
470 | |||
471 | movlhps xmm1,xmm1 |
||
472 | cvtpi2ps xmm1,mm3 |
||
473 | |||
474 | |||
475 | |||
476 | |||
477 | ;xmm1--> | dbx | dby | dex | dey | |
||
478 | ;1 movups .dey13,xmm1 |
||
1819 | yogev_ezra | 479 | |
480 | |||
481 | movhlps xmm1,xmm1 |
||
1245 | hidnplayr | 482 | cvtps2pi mm1,xmm1 ;mm1,xmm1 |
1819 | yogev_ezra | 483 | movq .dey13,mm0 |
1245 | hidnplayr | 484 | movq .dby13,mm1 |
485 | |||
1819 | yogev_ezra | 486 | |
1776 | yogev_ezra | 487 | sub ax,.z1 |
488 | cwde |
||
489 | |||
490 | |||
1819 | yogev_ezra | 491 | sub dx,.x1 |
492 | movsx edx,dx |
||
493 | |||
494 | |||
1776 | yogev_ezra | 495 | movd mm3,[.t_x3] |
496 | |||
497 | |||
498 | punpcklwd mm3,mm4 |
||
499 | psubd mm3,mm2 |
||
500 | |||
501 | |||
502 | movlhps xmm1,xmm1 |
||
503 | cvtsi2ss xmm1,edx |
||
1819 | yogev_ezra | 504 | shufps xmm1,xmm1,00101111b |
505 | cvtpi2ps xmm1,mm3 |
||
1776 | yogev_ezra | 506 | |
507 | |||
1819 | yogev_ezra | 508 | |
1776 | yogev_ezra | 509 | |
510 | ; xmm1--> | dx | dz | dtx | dty | |
||
1819 | yogev_ezra | 511 | ;1 movlps .dty13,xmm1 |
512 | ;1 movhps .dz13,xmm1 |
||
513 | |||
514 | |||
1776 | yogev_ezra | 515 | movhlps xmm1,xmm1 |
516 | cvtps2pi mm1,xmm1 |
||
1819 | yogev_ezra | 517 | movq .dty13,mm0 |
1776 | yogev_ezra | 518 | movq .dz13,mm1 |
1819 | yogev_ezra | 519 | |
520 | |||
521 | ; fninit |
||
522 | ; fld .dx13 |
||
523 | ; fistp .dx13 |
||
524 | ; fld dword .dz13 |
||
525 | ; fistp dword .dz13 |
||
526 | ; fld .dbx13 |
||
527 | ; fistp .dbx13 |
||
528 | ; fld dword .dby13 |
||
529 | ; fistp dword .dby13 |
||
530 | ; fld .dex13 |
||
531 | ; fistp .dex13 |
||
532 | ; fld dword .dey13 |
||
533 | ; fistp dword .dey13 |
||
534 | ; fld .dtx13 |
||
535 | ; fistp .dtx13 |
||
536 | ; fld dword .dty13 |
||
537 | ; fistp dword .dty13 |
||
538 | |||
539 | |||
1245 | hidnplayr | 540 | |
1819 | yogev_ezra | 541 | |
542 | sub ax,.x1 |
||
543 | cwde |
||
544 | shl eax,ROUND |
||
545 | cdq |
||
546 | idiv ebx |
||
547 | ; mov .dx13,eax |
||
548 | push eax |
||
549 | |||
550 | |||
1776 | yogev_ezra | 551 | sub ax,.z1 |
552 | cwde |
||
553 | shl eax,CATMULL_SHIFT |
||
554 | cdq |
||
555 | idiv ebx |
||
556 | ; mov .dz13,eax |
||
557 | push eax |
||
558 | |||
559 | |||
560 | |||
1245 | hidnplayr | 561 | sub ax,word[.b_x1] |
562 | cwde |
||
563 | shl eax,ROUND |
||
564 | cdq |
||
565 | idiv ebx |
||
566 | ; mov .dbx13,eax |
||
567 | push eax |
||
568 | |||
569 | |||
570 | sub ax,word[.b_y1] |
||
571 | cwde |
||
572 | shl eax,ROUND |
||
573 | cdq |
||
574 | idiv ebx |
||
575 | ; mov .dby13,eax |
||
576 | push eax |
||
577 | |||
578 | |||
579 | sub ax,word[.e_x1] |
||
580 | cwde |
||
581 | shl eax,ROUND |
||
582 | cdq |
||
583 | idiv ebx |
||
584 | ; mov .dex13,eax |
||
585 | push eax |
||
586 | |||
587 | |||
588 | sub ax,word[.e_y1] |
||
589 | cwde |
||
590 | shl eax,ROUND |
||
591 | cdq |
||
592 | idiv ebx |
||
593 | ; mov .dey13,eax |
||
594 | push eax |
||
595 | |||
596 | |||
597 | sub ax,word[.t_x1] |
||
598 | cwde |
||
599 | shl eax,ROUND |
||
600 | cdq |
||
601 | idiv ebx |
||
602 | ; mov .dtx13,eax |
||
603 | push eax |
||
604 | |||
605 | |||
606 | sub ax,word[.t_y1] |
||
607 | cwde |
||
608 | shl eax,ROUND |
||
609 | cdq |
||
610 | idiv ebx |
||
611 | ; mov .dty13,eax |
||
612 | push eax |
||
613 | end if |
||
1776 | yogev_ezra | 614 | .bt_dx13_done: |
1245 | hidnplayr | 615 | |
616 | |||
617 | sub bx,.y2 |
||
618 | jnz .bt_dx23_make |
||
619 | mov ecx,8 |
||
620 | xor edx,edx |
||
621 | @@: |
||
622 | push edx ;dword 0 |
||
623 | loop @b |
||
624 | jmp .bt_dx23_done |
||
625 | .bt_dx23_make: |
||
626 | movsx ebx,bx |
||
627 | |||
628 | |||
629 | |||
630 | |||
1819 | yogev_ezra | 631 | ; mov eax,256 |
632 | cvtsi2ss xmm4,[i255d] |
||
1245 | hidnplayr | 633 | cvtsi2ss xmm3,ebx ;rcps |
634 | divss xmm3,xmm4 |
||
635 | shufps xmm3,xmm3,0 |
||
636 | |||
637 | |||
638 | movd mm1,[.b_x3] |
||
639 | movd mm2,[.e_x2] |
||
640 | movd mm3,[.e_x3] |
||
641 | |||
642 | |||
643 | punpcklwd mm0,mm4 |
||
644 | punpcklwd mm1,mm4 |
||
645 | punpcklwd mm2,mm4 |
||
646 | punpcklwd mm3,mm4 |
||
647 | |||
648 | |||
649 | psubd mm3,mm2 |
||
650 | |||
651 | |||
652 | movlhps xmm1,xmm1 |
||
653 | cvtpi2ps xmm1,mm3 |
||
654 | |||
655 | |||
656 | |||
657 | |||
658 | ;xmm1--> | dbx | dby | dex | dey | |
||
659 | ;1 movups .dey23,xmm1 |
||
1819 | yogev_ezra | 660 | |
661 | |||
662 | movhlps xmm1,xmm1 |
||
1245 | hidnplayr | 663 | cvtps2pi mm1,xmm1 ;mm1,xmm1 |
1819 | yogev_ezra | 664 | movq .dey23,mm0 |
1245 | hidnplayr | 665 | movq .dby23,mm1 |
666 | |||
1819 | yogev_ezra | 667 | |
1776 | yogev_ezra | 668 | sub ax,.z2 |
669 | cwde |
||
670 | |||
671 | |||
1819 | yogev_ezra | 672 | sub dx,.x2 |
673 | movsx edx,dx |
||
674 | |||
675 | |||
1776 | yogev_ezra | 676 | movd mm3,[.t_x3] |
677 | |||
678 | |||
679 | punpcklwd mm3,mm4 |
||
680 | psubd mm3,mm2 |
||
681 | |||
682 | |||
683 | movlhps xmm1,xmm1 |
||
684 | cvtsi2ss xmm1,edx |
||
1819 | yogev_ezra | 685 | shufps xmm1,xmm1,00101111b |
686 | cvtpi2ps xmm1,mm3 |
||
1776 | yogev_ezra | 687 | |
688 | |||
1819 | yogev_ezra | 689 | |
1776 | yogev_ezra | 690 | |
691 | ; xmm1--> | dx | dz | dtx | dty | |
||
1819 | yogev_ezra | 692 | ; movlps .dty23,xmm1 |
693 | ; movhps .dz23,xmm1 |
||
694 | cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords | dtx | dty | |
||
1776 | yogev_ezra | 695 | movhlps xmm1,xmm1 |
696 | cvtps2pi mm1,xmm1 ; mm1 --> 2 delta dwords | dx | dz | |
||
1819 | yogev_ezra | 697 | movq .dty23,mm0 |
1776 | yogev_ezra | 698 | movq .dz23,mm1 |
1819 | yogev_ezra | 699 | |
700 | |||
701 | |||
702 | ; fninit |
||
703 | ; fld .dx23 |
||
704 | ; fistp .dx23 |
||
705 | ; fld dword .dz23 |
||
706 | ; fistp dword .dz23 |
||
707 | ; fld .dbx23 |
||
708 | ; fistp .dbx23 |
||
709 | ; fld dword .dby23 |
||
710 | ; fistp dword .dby23 |
||
711 | ; fld .dex23 |
||
712 | ; fistp .dex23 |
||
713 | ; fld dword .dey23 |
||
714 | ; fistp dword .dey23 |
||
715 | ; fld .dtx23 |
||
716 | ; fistp .dtx23 |
||
717 | ; fld dword .dty23 |
||
718 | ; fistp dword .dty23 |
||
719 | else |
||
1245 | hidnplayr | 720 | mov ax,.x3 |
1819 | yogev_ezra | 721 | sub ax,.x2 |
722 | cwde |
||
723 | shl eax,ROUND |
||
724 | cdq |
||
725 | idiv ebx |
||
726 | ; mov .dx23,eax |
||
727 | push eax |
||
728 | |||
1776 | yogev_ezra | 729 | |
730 | sub ax,.z2 |
||
731 | cwde |
||
732 | shl eax,CATMULL_SHIFT |
||
733 | cdq |
||
734 | idiv ebx |
||
735 | ; mov .dz23,eax |
||
736 | push eax |
||
737 | |||
738 | |||
1245 | hidnplayr | 739 | sub ax,word[.b_x2] |
740 | cwde |
||
741 | shl eax,ROUND |
||
742 | cdq |
||
743 | idiv ebx |
||
744 | ; mov .dbx23,eax |
||
745 | push eax |
||
746 | |||
747 | |||
748 | sub ax,word[.b_y2] |
||
749 | cwde |
||
750 | shl eax,ROUND |
||
751 | cdq |
||
752 | idiv ebx |
||
753 | ; mov .dby23,eax |
||
754 | push eax |
||
755 | |||
756 | |||
757 | sub ax,word[.e_x2] |
||
758 | cwde |
||
759 | shl eax,ROUND |
||
760 | cdq |
||
761 | idiv ebx |
||
762 | ; mov .dex23,eax |
||
763 | push eax |
||
764 | |||
765 | |||
766 | sub ax,word[.e_y2] |
||
767 | cwde |
||
768 | shl eax,ROUND |
||
769 | cdq |
||
770 | idiv ebx |
||
771 | ; mov .dey23,eax |
||
772 | push eax |
||
773 | |||
774 | |||
1776 | yogev_ezra | 775 | |
1245 | hidnplayr | 776 | sub ax,word[.t_x2] |
777 | cwde |
||
778 | shl eax,ROUND |
||
779 | cdq |
||
780 | idiv ebx |
||
781 | ; mov .dtx23,eax |
||
782 | push eax |
||
783 | |||
784 | |||
785 | sub ax,word[.t_y2] |
||
786 | cwde |
||
787 | shl eax,ROUND |
||
788 | cdq |
||
789 | idiv ebx |
||
790 | ; mov .dty23,eax |
||
791 | push eax |
||
792 | end if |
||
1776 | yogev_ezra | 793 | ; sub esp,40 |
1245 | hidnplayr | 794 | .bt_dx23_done: |
795 | sub esp,64 |
||
796 | ;if Ext>=SSE |
||
1819 | yogev_ezra | 797 | ; movsx eax,.x1 |
798 | ; shl eax,ROUND |
||
799 | ; cvtsi2ss xmm0,eax |
||
800 | ; movss .cx1,xmm0 |
||
801 | ; movss .cx2,xmm0 |
||
802 | ; |
||
803 | ; movsx ebx,word[.b_x1] |
||
804 | ; shl ebx,ROUND |
||
805 | ; cvtsi2ss xmm0,ebx |
||
806 | ; movss .cbx1,xmm0 |
||
807 | ; movss .cbx2,xmm0 |
||
808 | ; |
||
809 | ; movsx ecx,word[.b_y1] |
||
810 | ; shl ecx,ROUND |
||
811 | ; cvtsi2ss xmm0,ecx |
||
812 | ; movss .cby1,xmm0 |
||
813 | ; movss .cby2,xmm0 |
||
814 | |||
815 | |||
816 | ; shl edx,ROUND |
||
817 | ; cvtsi2ss xmm0,edx |
||
818 | ; movss .cex1,xmm0 |
||
819 | ; movss .cex2,xmm0 |
||
820 | ; |
||
821 | ; movsx eax,word[.e_y1] |
||
822 | ; shl eax,ROUND |
||
823 | ; cvtsi2ss xmm0,eax |
||
824 | ; movss .cey1,xmm0 |
||
825 | ; movss .cey2,xmm0 |
||
826 | ; |
||
827 | |||
828 | |||
829 | ; shl ebx,CATMULL_SHIFT |
||
830 | ; cvtsi2ss xmm0,ebx |
||
831 | ; movss .cz1,xmm0 |
||
832 | ; movss .cz2,xmm0 |
||
833 | ; |
||
834 | ; movsx ecx,word[.t_x1] |
||
835 | ; shl ecx,ROUND |
||
836 | ; cvtsi2ss xmm0,ecx |
||
837 | ; movss .ctx1,xmm0 |
||
838 | ; movss .ctx2,xmm0 |
||
839 | |||
840 | |||
841 | ; shl edx,ROUND |
||
842 | ; cvtsi2ss xmm0,edx |
||
843 | ; movss .cty1,xmm0 |
||
844 | ; movss .cty2,xmm0 |
||
845 | |||
846 | |||
847 | |||
848 | |||
1245 | hidnplayr | 849 | shl eax,ROUND |
850 | mov .cx1,eax |
||
851 | mov .cx2,eax |
||
852 | ; push eax |
||
853 | ; push eax |
||
854 | |||
855 | |||
856 | shl ebx,ROUND |
||
857 | mov .cbx1,ebx |
||
858 | mov .cbx2,ebx |
||
859 | ; push ebx |
||
860 | ; push ebx |
||
861 | |||
862 | |||
863 | shl ecx,ROUND |
||
864 | mov .cby1,ecx |
||
865 | mov .cby2,ecx |
||
866 | ; push ecx |
||
867 | ; push ecx |
||
868 | |||
869 | |||
870 | shl edx,ROUND |
||
871 | mov .cex1,edx |
||
872 | mov .cex2,edx |
||
873 | ; push edx |
||
874 | ; push edx |
||
875 | |||
876 | |||
877 | shl eax,ROUND |
||
878 | mov .cey1,eax |
||
879 | mov .cey2,eax |
||
880 | ; push eax |
||
881 | ; push eax |
||
882 | |||
883 | |||
884 | shl ebx,CATMULL_SHIFT |
||
885 | mov .cz1,ebx |
||
886 | mov .cz2,ebx |
||
887 | ; push ebx |
||
888 | ; push ebx |
||
889 | |||
890 | |||
891 | movsx ecx,word[.t_x1] |
||
892 | shl ecx,ROUND |
||
893 | mov .ctx1,ecx |
||
894 | mov .ctx2,ecx |
||
895 | ;push ecx |
||
896 | ;push ecx |
||
897 | |||
898 | |||
899 | shl edx,ROUND |
||
900 | mov .cty1,edx |
||
901 | mov .cty2,edx |
||
902 | ; push edx |
||
903 | ; push edx |
||
904 | ;end if |
||
1819 | yogev_ezra | 905 | |
1245 | hidnplayr | 906 | |
907 | cmp cx,.y2 |
||
908 | jge .loop12_done |
||
909 | .loop12: |
||
910 | call .call_line |
||
911 | ;if Ext >= SSE |
||
1819 | yogev_ezra | 912 | ; movups xmm0,.cby1 |
913 | ; movups xmm1,.cty1 |
||
914 | ; movups xmm2,.cby2 |
||
915 | ; movups xmm3,.cty2 |
||
916 | ; movups xmm4,.dby13 |
||
917 | ; movups xmm5,.dty13 |
||
918 | ; movups xmm6,.dby12 |
||
919 | ; movups xmm7,.dty12 |
||
920 | ; addps xmm0,xmm4 |
||
921 | ; addps xmm1,xmm5 |
||
922 | ; addps xmm2,xmm6 |
||
923 | ; addps xmm3,xmm7 |
||
924 | ; |
||
925 | ;; addps xmm0,.dby12 |
||
926 | ;; addps xmm1,.dty12 |
||
927 | ;; addps xmm2,.dby13 |
||
928 | ;; addps xmm3,.dty13 |
||
929 | ; movups .cby1,xmm0 |
||
930 | ; movups .cty1,xmm1 |
||
931 | ; movups .cby2,xmm2 |
||
932 | ; movups .cty2,xmm3 |
||
933 | ;end if |
||
934 | |||
1245 | hidnplayr | 935 | |
936 | movq mm0,.cby2 |
||
937 | movq mm1,.cby1 |
||
938 | movq mm2,.cey2 |
||
939 | movq mm3,.cey1 |
||
940 | movq mm4,.cty1 |
||
941 | movq mm5,.cty2 |
||
942 | movq mm6,.cz1 |
||
943 | movq mm7,.cz2 |
||
944 | paddd mm0,.dby12 |
||
945 | paddd mm1,.dby13 |
||
946 | paddd mm2,.dey12 |
||
947 | paddd mm3,.dey13 |
||
948 | paddd mm4,.dty13 |
||
949 | paddd mm5,.dty12 |
||
950 | paddd mm6,.dz13 |
||
951 | paddd mm7,.dz12 |
||
952 | movq .cby2,mm0 |
||
953 | movq .cby1,mm1 |
||
954 | movq .cey1,mm3 |
||
955 | movq .cey2,mm2 |
||
956 | movq .cty1,mm4 |
||
957 | movq .cty2,mm5 |
||
958 | movq .cz1,mm6 |
||
959 | movq .cz2,mm7 |
||
960 | end if |
||
1819 | yogev_ezra | 961 | if Ext = NON |
962 | mov edx,.dbx13 |
||
1245 | hidnplayr | 963 | add .cbx1,edx |
964 | mov eax,.dbx12 |
||
965 | add .cbx2,eax |
||
966 | mov ebx,.dby13 |
||
967 | add .cby1,ebx |
||
968 | mov edx,.dby12 |
||
969 | add .cby2,edx |
||
970 | |||
971 | |||
972 | add .cex1,eax |
||
973 | mov ebx,.dex12 |
||
974 | add .cex2,ebx |
||
975 | mov edx,.dey13 |
||
976 | add .cey1,edx |
||
977 | mov eax,.dey12 |
||
978 | add .cey2,eax |
||
979 | |||
980 | |||
981 | add .ctx1,eax |
||
982 | mov ebx,.dtx12 |
||
983 | add .ctx2,ebx |
||
984 | mov edx,.dty13 |
||
985 | add .cty1,edx |
||
986 | mov eax,.dty12 |
||
987 | add .cty2,eax |
||
988 | |||
989 | |||
990 | add .cx1,eax |
||
991 | mov ebx,.dx12 |
||
992 | add .cx2,ebx |
||
993 | mov ebx,.dz13 |
||
994 | add .cz1,ebx |
||
995 | mov edx,.dz12 |
||
996 | add .cz2,edx |
||
997 | end if |
||
998 | inc ecx |
||
999 | cmp cx,.y2 |
||
1000 | jl .loop12 |
||
1001 | .loop12_done: |
||
1002 | |||
1003 | |||
1004 | cmp cx,.y3 |
||
1005 | jge .loop23_done |
||
1006 | |||
1007 | |||
1819 | yogev_ezra | 1008 | |
1009 | |||
1245 | hidnplayr | 1010 | shl eax,CATMULL_SHIFT |
1011 | mov .cz2,eax |
||
1012 | |||
1013 | |||
1014 | shl ebx,ROUND |
||
1015 | mov .cx2,ebx |
||
1016 | |||
1017 | |||
1018 | shl edx,ROUND |
||
1019 | mov .cbx2,edx |
||
1020 | |||
1021 | |||
1022 | shl eax,ROUND |
||
1023 | mov .cby2,eax |
||
1024 | |||
1025 | |||
1026 | shl ebx,ROUND |
||
1027 | mov .cex2,ebx |
||
1028 | |||
1029 | |||
1030 | shl edx,ROUND |
||
1031 | mov .cey2,edx |
||
1032 | |||
1033 | |||
1034 | shl eax,ROUND |
||
1035 | mov .ctx2,eax |
||
1036 | |||
1037 | |||
1038 | shl ebx,ROUND |
||
1039 | mov .cty2,ebx |
||
1040 | ;else |
||
1819 | yogev_ezra | 1041 | ; movsx eax,.z2 |
1042 | ; shl eax,CATMULL_SHIFT |
||
1043 | ; cvtsi2ss xmm0,eax |
||
1044 | ; movss .cz2,xmm0 |
||
1045 | ; |
||
1046 | ; movsx ebx,.x2 |
||
1047 | ; shl ebx,ROUND |
||
1048 | ; cvtsi2ss xmm1,ebx |
||
1049 | ; movss .cx2,xmm1 |
||
1050 | ; |
||
1051 | ; movzx edx,word[.b_x2] |
||
1052 | ; shl edx,ROUND |
||
1053 | ; cvtsi2ss xmm2,edx |
||
1054 | ; movss .cbx2,xmm2 |
||
1055 | ; |
||
1056 | ; movzx eax,word[.b_y2] |
||
1057 | ; shl eax,ROUND |
||
1058 | ; cvtsi2ss xmm0,eax |
||
1059 | ; movss .cby2,xmm0 |
||
1060 | ; |
||
1061 | ; movzx ebx,word[.e_x2] |
||
1062 | ; shl ebx,ROUND |
||
1063 | ; cvtsi2ss xmm1,ebx |
||
1064 | ; movss .cex2,xmm1 |
||
1065 | ; |
||
1066 | ; movzx edx,word[.e_y2] |
||
1067 | ; shl edx,ROUND |
||
1068 | ; cvtsi2ss xmm2,edx |
||
1069 | ; movss .cey2,xmm2 |
||
1070 | ; |
||
1071 | ; movzx eax,word[.t_x2] |
||
1072 | ; shl eax,ROUND |
||
1073 | ; cvtsi2ss xmm0,eax |
||
1074 | ; movss .ctx2,xmm0 |
||
1075 | ; |
||
1076 | ; movzx ebx,word[.t_y2] |
||
1077 | ; shl ebx,ROUND |
||
1078 | ; cvtsi2ss xmm1,ebx |
||
1079 | ; movss .cty2,xmm1 |
||
1080 | |||
1245 | hidnplayr | 1081 | |
1819 | yogev_ezra | 1082 | |
1083 | |||
1245 | hidnplayr | 1084 | call .call_line |
1085 | |||
1086 | |||
1819 | yogev_ezra | 1087 | |
1088 | |||
1089 | ; movups xmm1,.cty1 |
||
1090 | ; movups xmm2,.cby2 |
||
1091 | ; movups xmm3,.cty2 |
||
1092 | ; movups xmm4,.dby13 |
||
1093 | ; movups xmm5,.dty13 |
||
1094 | ; movups xmm6,.dby23 |
||
1095 | ; movups xmm7,.dty23 |
||
1096 | ; addps xmm0,xmm4 |
||
1097 | ; addps xmm1,xmm5 |
||
1098 | ; addps xmm2,xmm6 |
||
1099 | ; addps xmm3,xmm7 |
||
1100 | ; ; addps xmm0,.dby13 |
||
1101 | ; ; addps xmm1,.dty13 |
||
1102 | ; ; addps xmm2,.dby23 |
||
1103 | ; ; addps xmm3,.dty23 |
||
1104 | ; movups .cby1,xmm0 |
||
1105 | ; movups .cty1,xmm1 |
||
1106 | ; movups .cby2,xmm2 |
||
1107 | ; movups .cty2,xmm3 |
||
1108 | ; |
||
1109 | ;end if |
||
1110 | if Ext >= MMX |
||
1245 | hidnplayr | 1111 | movq mm0,.cby2 |
1112 | movq mm1,.cby1 |
||
1113 | movq mm2,.cey2 |
||
1114 | movq mm3,.cey1 |
||
1115 | movq mm4,.cty1 |
||
1116 | movq mm5,.cty2 |
||
1117 | movq mm6,.cz1 |
||
1118 | movq mm7,.cz2 |
||
1119 | paddd mm0,.dby23 |
||
1120 | paddd mm1,.dby13 |
||
1121 | paddd mm2,.dey23 |
||
1122 | paddd mm3,.dey13 |
||
1123 | paddd mm4,.dty13 |
||
1124 | paddd mm5,.dty23 |
||
1125 | paddd mm6,.dz13 |
||
1126 | paddd mm7,.dz23 |
||
1127 | movq .cby2,mm0 |
||
1128 | movq .cby1,mm1 |
||
1129 | movq .cey2,mm2 |
||
1130 | movq .cey1,mm3 |
||
1131 | movq .cty1,mm4 |
||
1132 | movq .cty2,mm5 |
||
1133 | movq .cz1,mm6 |
||
1134 | movq .cz2,mm7 |
||
1135 | end if |
||
1819 | yogev_ezra | 1136 | If Ext = NON |
1137 | mov edx,.dbx13 |
||
1245 | hidnplayr | 1138 | add .cbx1,edx |
1139 | mov eax,.dbx23 |
||
1140 | add .cbx2,eax |
||
1141 | mov ebx,.dby13 |
||
1142 | add .cby1,ebx |
||
1143 | mov edx,.dby23 |
||
1144 | add .cby2,edx |
||
1145 | |||
1146 | |||
1147 | add .cex1,eax |
||
1148 | mov ebx,.dex23 |
||
1149 | add .cex2,ebx |
||
1150 | mov edx,.dey13 |
||
1151 | add .cey1,edx |
||
1152 | mov eax,.dey23 |
||
1153 | add .cey2,eax |
||
1154 | |||
1155 | |||
1156 | add .cx1,eax |
||
1157 | mov ebx,.dx23 |
||
1158 | add .cx2,ebx |
||
1159 | mov ebx,.dz13 |
||
1160 | add .cz1,ebx |
||
1161 | mov edx,.dz23 |
||
1162 | add .cz2,edx |
||
1163 | |||
1164 | |||
1165 | add .ctx1,eax |
||
1166 | mov ebx,.dtx23 |
||
1167 | add .ctx2,ebx |
||
1168 | mov edx,.dty13 |
||
1169 | add .cty1,edx |
||
1170 | mov eax,.dty23 |
||
1171 | add .cty2,eax |
||
1172 | end if |
||
1173 | inc ecx |
||
1174 | cmp cx,.y3 |
||
1175 | jl .loop23 |
||
1176 | .loop23_done: |
||
1177 | |||
1178 | |||
1179 | ret 50 |
||
1180 | |||
1181 | |||
1182 | ;if Ext >= SSE |
||
1819 | yogev_ezra | 1183 | ; pushad |
1184 | ; push .tex_ptr |
||
1185 | ; fninit |
||
1186 | ; fld dword .cty1 |
||
1187 | ; fistp dword [esp-4] |
||
1188 | ; sub esp,4 |
||
1189 | ;; push dword .cty1 |
||
1190 | ; fld .ctx1 |
||
1191 | ; fistp dword [esp-4] |
||
1192 | ; sub esp,4 |
||
1193 | ;; push .ctx1 |
||
1194 | ; fld dword .cz1 |
||
1195 | ; fistp dword [esp-4] |
||
1196 | ; sub esp,4 |
||
1197 | ; ; push dwod .cz1 |
||
1198 | ; fld dword .cty2 |
||
1199 | ; fistp dword [esp-4] |
||
1200 | ; sub esp,4 |
||
1201 | ; ; push .cty2 |
||
1202 | ; fld .ctx2 |
||
1203 | ; fistp dword [esp-4] |
||
1204 | ; sub esp,4 |
||
1205 | ; ; push dword .ctx2 |
||
1206 | ; fld dword .cz2 |
||
1207 | ; fistp dword [esp-4] |
||
1208 | ; sub esp,4 |
||
1209 | ;; push dword .cz2 |
||
1210 | ; |
||
1211 | ; push .z_buff |
||
1212 | ; push .t_emap |
||
1213 | ; push .t_bmap |
||
1214 | ;-------------------------------------- |
||
1215 | ; fld dword .cey2 |
||
1216 | ; fistp dword [esp-4] |
||
1217 | ; sub esp,4 |
||
1218 | ;; push dword .cey2 |
||
1219 | ; |
||
1220 | ; fld .cex2 |
||
1221 | ; fistp dword [esp-4] |
||
1222 | ; sub esp,4 |
||
1223 | ;; push .cex2 |
||
1224 | ; |
||
1225 | ; fld dword .cby2 |
||
1226 | ; fistp dword [esp-4] |
||
1227 | ; sub esp,4 |
||
1228 | ; ; push dword .cby2 |
||
1229 | |||
1245 | hidnplayr | 1230 | |
1819 | yogev_ezra | 1231 | ; fistp dword [esp-4] |
1232 | ; sub esp,4 |
||
1233 | ; push .cbx2 |
||
1234 | ;------------------------------------ |
||
1235 | ; fld dword .cey1 |
||
1236 | ; fistp dword [esp-4] |
||
1237 | ; sub esp,4 |
||
1238 | ;; push dword .cey1 |
||
1239 | ; fld .cex1 |
||
1240 | ; fistp dword [esp-4] |
||
1241 | ; sub esp,4 |
||
1242 | ; ; push .cex1 |
||
1243 | ; fld dword .cby1 |
||
1244 | ; fistp dword [esp-4] |
||
1245 | ; sub esp,4 |
||
1246 | ;; push dword .cby1 |
||
1247 | ; fld .cbx1 |
||
1248 | ; fistp dword [esp-4] |
||
1249 | ; sub esp,4 |
||
1250 | ;; push .cbx1 |
||
1251 | ; push ecx |
||
1252 | |||
1253 | |||
1254 | ; fistp dword [esp-4] |
||
1255 | ; mov eax,[esp-4] |
||
1256 | ; sar eax,ROUND |
||
1257 | ; fld .cx2 |
||
1258 | ; fistp dword [esp-4] |
||
1259 | ; mov ebx,[esp-4] |
||
1260 | ; sar ebx,ROUND |
||
1261 | |||
1262 | |||
1263 | ; |
||
1264 | ; popad |
||
1265 | ;else |
||
1266 | pushad |
||
1245 | hidnplayr | 1267 | push .tex_ptr |
1268 | push dword .cty1 |
||
1269 | push .ctx1 |
||
1270 | push dword .cz1 |
||
1271 | push dword .cty2 |
||
1819 | yogev_ezra | 1272 | push .ctx2 |
1273 | push dword .cz2 |
||
1245 | hidnplayr | 1274 | push .z_buff |
1275 | push .t_emap |
||
1276 | push .t_bmap |
||
1277 | push dword .cey2 |
||
1278 | push .cex2 |
||
1279 | push dword .cby2 |
||
1819 | yogev_ezra | 1280 | push .cbx2 |
1281 | push dword .cey1 |
||
1245 | hidnplayr | 1282 | push .cex1 |
1283 | push dword .cby1 |
||
1284 | push .cbx1 |
||
1285 | push ecx |
||
1286 | |||
1287 | |||
1288 | sar eax,ROUND |
||
1289 | mov ebx,.cx2 |
||
1290 | sar ebx,ROUND |
||
1291 | |||
1292 | |||
1293 | |||
1294 | |||
1295 | ;end if |
||
1819 | yogev_ezra | 1296 | ret |
1245 | hidnplayr | 1297 | bump_tex_line_z: |
1298 | ;--------------in: eax - x1 |
||
1299 | ;-------------- ebx - x2 |
||
1300 | ;-------------- edi - pointer to screen buffer |
||
1301 | ;stack - another parameters : |
||
1302 | .y equ dword [ebp+4] |
||
1303 | |||
1304 | |||
1819 | yogev_ezra | 1305 | .by1 equ [ebp+12] ; | |
1306 | .ex1 equ [ebp+16] ; | |
||
1307 | .ey1 equ [ebp+20] ; | |
||
1308 | .bx2 equ [ebp+24] ; | |
||
1309 | .by2 equ [ebp+28] ; |> b. map and e. map coords |
||
1310 | .ex2 equ [ebp+32] ; |> shifted shl ROUND |
||
1311 | .ey2 equ [ebp+36] ; --- |
||
1312 | .bmap equ [ebp+40] ; bump map offset |
||
1313 | .emap equ [ebp+44] ; env map offset |
||
1314 | .z_buff equ [ebp+48] |
||
1315 | .z2 equ [ebp+52] |
||
1316 | .tx2 equ [ebp+56] |
||
1317 | .ty2 equ [ebp+60] |
||
1318 | .z1 equ [ebp+64] |
||
1319 | .tx1 equ [ebp+68] |
||
1320 | .ty1 equ [ebp+72] |
||
1321 | .tex_map equ dword [ebp+76] ; texture offset ( pointer ) |
||
1245 | hidnplayr | 1322 | |
1323 | |||
1324 | |||
1819 | yogev_ezra | 1325 | .x2 equ [ebp-8] |
1326 | .dbx equ [ebp-12] |
||
1327 | .dby equ [ebp-16] |
||
1328 | .dex equ [ebp-20] |
||
1329 | .dey equ [ebp-24] |
||
1330 | .dz equ [ebp-28] |
||
1331 | .dtx equ [ebp-32] |
||
1332 | .dty equ [ebp-36] |
||
1333 | |||
1245 | hidnplayr | 1334 | |
1819 | yogev_ezra | 1335 | .cby equ [ebp-44] |
1336 | .cex equ [ebp-48] |
||
1337 | .cey equ [ebp-52] |
||
1338 | .cz equ [ebp-56] |
||
1339 | .czbuff equ [ebp-60] |
||
1340 | .ctx equ [ebp-64] |
||
1341 | .cty equ [ebp-68] |
||
1342 | .c_scr equ [ebp-72] |
||
1343 | |||
1245 | hidnplayr | 1344 | |
1345 | .temp2 equ ebp-88 |
||
1346 | .temp3 equ ebp-76 |
||
1347 | .temp4 equ ebp-84 |
||
1348 | .temp5 equ ebp-92 |
||
1349 | |||
1350 | |||
1351 | |||
1352 | |||
1353 | or ecx,ecx |
||
1354 | jl .bl_end |
||
1355 | cmp ecx,SIZE_Y |
||
1356 | jge .bl_end |
||
1357 | |||
1358 | |||
1359 | jl .bl_ok |
||
1360 | je .bl_end |
||
1361 | |||
1362 | |||
1363 | if Ext=NON |
||
1364 | mov edx,.bx1 |
||
1365 | xchg edx,.bx2 |
||
1366 | mov .bx1,edx |
||
1367 | mov edx,.by1 |
||
1368 | xchg edx,.by2 |
||
1369 | mov .by1,edx |
||
1370 | |||
1371 | |||
1372 | xchg edx,.ex2 |
||
1373 | mov .ex1,edx |
||
1374 | mov edx,.ey1 |
||
1375 | xchg edx,.ey2 |
||
1376 | mov .ey1,edx |
||
1377 | |||
1378 | |||
1379 | xchg edx,.tx2 |
||
1380 | mov .tx1,edx |
||
1381 | mov edx,.ty1 |
||
1382 | xchg edx,.ty2 |
||
1383 | mov .ty1,edx |
||
1384 | end if |
||
1385 | if Ext = MMX |
||
1819 | yogev_ezra | 1386 | movq mm0,.bx1 |
1387 | movq mm1,.bx2 |
||
1388 | movq mm2,.ex1 |
||
1389 | movq mm3,.ex2 |
||
1390 | movq mm4,.tx1 |
||
1391 | movq mm5,.tx2 |
||
1392 | movq .bx2,mm0 |
||
1393 | movq .bx1,mm1 |
||
1394 | movq .ex1,mm3 |
||
1395 | movq .ex2,mm2 |
||
1396 | movq .tx1,mm5 |
||
1397 | movq .tx2,mm4 |
||
1398 | end if |
||
1399 | if Ext>=SSE |
||
1400 | movups xmm0,.bx1 |
||
1401 | movups xmm1,.bx2 |
||
1402 | movups .bx1,xmm1 |
||
1403 | movups .bx2,xmm0 |
||
1404 | movq mm0,.tx1 |
||
1405 | movq mm1,.tx2 |
||
1406 | movq .tx1,mm1 |
||
1407 | movq .tx2,mm0 |
||
1408 | end if |
||
1409 | |||
1245 | hidnplayr | 1410 | |
1411 | xchg edx,.z2 |
||
1412 | mov .z1,edx |
||
1413 | .bl_ok: |
||
1414 | push eax |
||
1415 | push ebx ;store x1, x2 |
||
1416 | cmp dword .x1,SIZE_X |
||
1819 | yogev_ezra | 1417 | jge .bl_end |
1245 | hidnplayr | 1418 | cmp dword .x2,0 |
1819 | yogev_ezra | 1419 | jle .bl_end |
1245 | hidnplayr | 1420 | |
1421 | |||
1422 | sub ebx,.x1 |
||
1423 | |||
1424 | |||
1425 | |||
1426 | |||
1427 | cvtsi2ss xmm3,ebx ;rcps |
||
1428 | shufps xmm3,xmm3,0 |
||
1429 | ; float using SSE variant ::--> |
||
1819 | yogev_ezra | 1430 | ; movups xmm0,.bx1 ; new |
1431 | ; movups xmm1,.bx2 ; new |
||
1432 | |||
1245 | hidnplayr | 1433 | |
1819 | yogev_ezra | 1434 | movlhps xmm0,xmm0 |
1245 | hidnplayr | 1435 | cvtpi2ps xmm0,.ex1 ;mm2 |
1819 | yogev_ezra | 1436 | cvtpi2ps xmm1,.bx2 ;mm1 |
1437 | movlhps xmm1,xmm1 |
||
1245 | hidnplayr | 1438 | cvtpi2ps xmm1,.ex2 ;mm3 |
1819 | yogev_ezra | 1439 | subps xmm1,xmm0 |
1245 | hidnplayr | 1440 | |
1441 | |||
1442 | |||
1443 | |||
1444 | ; movups .dey,xmm1 ; new |
||
1819 | yogev_ezra | 1445 | cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords |
1245 | hidnplayr | 1446 | movhlps xmm1,xmm1 |
1447 | cvtps2pi mm1,xmm1 |
||
1448 | movq .dey,mm0 |
||
1819 | yogev_ezra | 1449 | movq .dby,mm1 |
1450 | |||
1245 | hidnplayr | 1451 | |
1452 | movd mm3,.z2 |
||
1453 | |||
1454 | |||
1819 | yogev_ezra | 1455 | movlhps xmm0,xmm0 |
1245 | hidnplayr | 1456 | cvtpi2ps xmm0,mm2 |
1457 | cvtpi2ps xmm1,.tx2 ;mm1 |
||
1819 | yogev_ezra | 1458 | movlhps xmm1,xmm1 |
1245 | hidnplayr | 1459 | cvtpi2ps xmm1,mm3 |
1460 | ; movups xmm0,,z1 ; new |
||
1819 | yogev_ezra | 1461 | ; movups xmm1,.z2 ; new |
1462 | subps xmm1,xmm0 |
||
1245 | hidnplayr | 1463 | |
1464 | |||
1465 | |||
1466 | |||
1819 | yogev_ezra | 1467 | |
1468 | |||
1245 | hidnplayr | 1469 | cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords |
1470 | movhlps xmm1,xmm1 |
||
1471 | cvtps2pi mm1,xmm1 |
||
1472 | movd .dz,mm0 |
||
1473 | movq .dty,mm1 |
||
1819 | yogev_ezra | 1474 | |
1245 | hidnplayr | 1475 | |
1476 | |||
1477 | |||
1478 | sub eax,.bx1 |
||
1479 | cdq |
||
1480 | idiv ebx |
||
1481 | push eax |
||
1482 | |||
1483 | |||
1484 | sub eax,.by1 |
||
1485 | cdq |
||
1486 | idiv ebx |
||
1487 | push eax |
||
1488 | |||
1489 | |||
1490 | sub eax,.ex1 |
||
1491 | cdq |
||
1492 | idiv ebx |
||
1493 | push eax |
||
1494 | |||
1495 | |||
1496 | sub eax,.ey1 |
||
1497 | cdq |
||
1498 | idiv ebx |
||
1499 | push eax |
||
1500 | |||
1501 | |||
1502 | |||
1503 | sub eax,.z1 |
||
1504 | cdq |
||
1505 | idiv ebx |
||
1506 | push eax |
||
1507 | |||
1508 | |||
1509 | sub eax,.tx1 |
||
1510 | cdq |
||
1511 | idiv ebx |
||
1512 | push eax |
||
1513 | |||
1514 | |||
1515 | sub eax,.ty1 |
||
1516 | cdq |
||
1517 | idiv ebx |
||
1518 | push eax |
||
1519 | |||
1520 | |||
1521 | cmp dword .x1,0 ; set correctly begin variable |
||
1819 | yogev_ezra | 1522 | jge @f ; CLIPPING ON FUNCTION |
1245 | hidnplayr | 1523 | ; cutting triangle exceedes screen |
1524 | mov ebx,.x1 |
||
1525 | neg ebx |
||
1526 | |||
1819 | yogev_ezra | 1527 | |
1528 | |||
1529 | |||
1530 | ; shufps xmm0,xmm0,0 |
||
1531 | ; movups xmm1,.dey |
||
1532 | ; mulps xmm1,xmm0 |
||
1533 | ; shufps xmm1,xmm1,00011011b |
||
1534 | ; movups xmm2,.bx1 |
||
1535 | ; addps xmm2,xmm1 |
||
1536 | ; movups .bx1,xmm2 |
||
1537 | |||
1538 | |||
1539 | imul ebx ; eax = .dz * abs(.x1) |
||
1245 | hidnplayr | 1540 | add .z1,eax |
1541 | mov dword .x1,0 |
||
1819 | yogev_ezra | 1542 | |
1245 | hidnplayr | 1543 | |
1544 | imul ebx |
||
1545 | add .bx1,eax |
||
1546 | |||
1547 | |||
1548 | imul ebx |
||
1549 | add .by1,eax |
||
1550 | |||
1551 | |||
1552 | imul ebx |
||
1553 | add .ex1,eax |
||
1554 | |||
1555 | |||
1556 | imul ebx |
||
1557 | add .ey1,eax |
||
1558 | |||
1559 | |||
1560 | imul ebx |
||
1561 | add .tx1,eax |
||
1562 | |||
1563 | |||
1564 | imul ebx |
||
1565 | add .ty1,eax |
||
1566 | |||
1567 | |||
1568 | cmp dword .x2,SIZE_X |
||
1819 | yogev_ezra | 1569 | jl @f |
1245 | hidnplayr | 1570 | mov dword .x2,SIZE_X |
1819 | yogev_ezra | 1571 | @@: |
1245 | hidnplayr | 1572 | mov eax,SIZE_X ;calc memory begin in buffers |
1573 | mul .y |
||
1574 | add eax,.x1 |
||
1575 | lea esi,[4*eax] |
||
1576 | add esi,.z_buff ; z-buffer filled with dd variables |
||
1577 | lea eax,[eax*3] |
||
1578 | add edi,eax |
||
1579 | |||
1580 | |||
1581 | |||
1582 | sub ecx,.x1 |
||
1583 | ; init current variables |
||
1584 | push dword .bx1 ; current b, e and t shifted shl ROUND .cbx |
||
1819 | yogev_ezra | 1585 | push dword .by1 ; .cby |
1586 | push dword .ex1 ; .cex |
||
1587 | push dword .ey1 ; .cey |
||
1588 | |||
1245 | hidnplayr | 1589 | |
1819 | yogev_ezra | 1590 | push esi ; .czbuff |
1245 | hidnplayr | 1591 | |
1592 | |||
1819 | yogev_ezra | 1593 | push dword .ty1 ; .cty |
1594 | push edi ; .c_scr |
||
1245 | hidnplayr | 1595 | if Ext>=MMX |
1596 | movq mm7,.cty |
||
1819 | yogev_ezra | 1597 | movq mm6,.cby |
1598 | movq mm5,.cey |
||
1599 | ; movq mm4,.dtyq |
||
1245 | hidnplayr | 1600 | ; movq mm3,.dbyq |
1601 | end if |
||
1602 | |||
1603 | |||
1604 | ; if TEX = SHIFTING ;bump drawing only in shifting mode |
||
1605 | mov esi,.czbuff ; .czbuff current address in buffer |
||
1606 | mov ebx,.cz ; .cz - cur z position |
||
1607 | cmp ebx,dword[esi] |
||
1608 | jge .skip |
||
1609 | if Ext=NON |
||
1610 | mov eax,.cby |
||
1611 | shr eax,ROUND |
||
1612 | mov esi,.cbx |
||
1613 | shr esi,ROUND |
||
1614 | else |
||
1615 | movq mm1,mm6 |
||
1616 | psrld mm1,ROUND |
||
1617 | movd eax,mm1 |
||
1618 | psrlq mm1,32 |
||
1619 | movd esi,mm1 |
||
1620 | end if |
||
1621 | |||
1622 | |||
1623 | |||
1624 | add esi,eax ;- ; esi - current bump map index |
||
1625 | |||
1626 | |||
1627 | dec ebx |
||
1628 | and ebx,TEXTURE_SIZE |
||
1629 | add ebx,.bmap |
||
1630 | movzx eax,byte [ebx] |
||
1631 | |||
1632 | |||
1633 | inc ebx |
||
1634 | and ebx,TEXTURE_SIZE |
||
1635 | add ebx,.bmap |
||
1636 | movzx ebx,byte [ebx] |
||
1637 | sub eax,ebx |
||
1638 | |||
1639 | |||
1640 | sub ebx,TEX_X |
||
1641 | and ebx,TEXTURE_SIZE |
||
1642 | add ebx,.bmap |
||
1643 | movzx edx,byte [ebx] |
||
1644 | |||
1645 | |||
1646 | add ebx,TEX_X |
||
1647 | and ebx,TEXTURE_SIZE |
||
1648 | add ebx,.bmap |
||
1649 | movzx ebx,byte [ebx] |
||
1650 | sub edx,ebx |
||
1651 | |||
1652 | |||
1819 | yogev_ezra | 1653 | |
1245 | hidnplayr | 1654 | ; edx - vertical sub modificated y coord |
1655 | if Ext=NON |
||
1656 | mov ebx,.cex ;.cex - current env map X |
||
1657 | shr ebx,ROUND |
||
1658 | add eax,ebx |
||
1659 | |||
1660 | |||
1661 | |||
1662 | shr ebx,ROUND |
||
1663 | add edx,ebx |
||
1664 | |||
1665 | |||
1666 | movq mm1,mm5 ; mm5 - copy of cur env coords |
||
1667 | psrld mm1,ROUND |
||
1668 | movd ebx,mm1 |
||
1669 | psrlq mm1,32 |
||
1670 | add eax,ebx |
||
1671 | movd ebx,mm1 |
||
1672 | add edx,ebx |
||
1673 | ; movq qword[.temp1],mm3 |
||
1674 | ; add eax,dword [.temp1] |
||
1675 | ; add edx,dword [.temp1+4] |
||
1676 | end if |
||
1677 | |||
1678 | |||
1679 | jl .black |
||
1680 | cmp eax,TEX_X |
||
1681 | jg .black |
||
1682 | or edx,edx |
||
1683 | jl .black |
||
1684 | cmp edx,TEX_Y |
||
1685 | jg .black |
||
1686 | |||
1687 | |||
1688 | add edx,eax ; proponuje nie stawiac czarnego pixela tylko |
||
1689 | lea esi,[edx*3] ; niezaburzony. |
||
1690 | add esi,.emap ; |
||
1691 | lodsd |
||
1692 | |||
1693 | |||
1694 | mov edx,.cty |
||
1695 | shr edx,ROUND ; sar |
||
1696 | |||
1697 | |||
1698 | shr edi,ROUND ; sar |
||
1699 | else |
||
1700 | movq mm1,mm7 |
||
1701 | psrld mm1,ROUND |
||
1702 | movd edx,mm1 |
||
1703 | psrlq mm1,32 |
||
1704 | movd edi,mm1 |
||
1705 | |||
1706 | |||
1707 | |||
1708 | |||
1709 | add edi,edx |
||
1710 | and edi,TEXTURE_SIZE |
||
1711 | lea esi,[edi*3] |
||
1712 | add esi,.tex_map |
||
1713 | |||
1714 | |||
1715 | mov edx,eax |
||
1716 | lodsd |
||
1717 | push ax |
||
1718 | mul dl |
||
1719 | mov dl,ah |
||
1720 | pop ax |
||
1721 | shr ax,8 |
||
1722 | mul dh |
||
1723 | mov al,dl |
||
1724 | mov edi,.c_scr |
||
1725 | stosw |
||
1726 | shr edx,16 |
||
1727 | shr eax,16 |
||
1728 | mul dl |
||
1729 | shr ax,8 |
||
1730 | stosb |
||
1731 | else |
||
1732 | movd mm0,eax |
||
1733 | pxor mm1,mm1 |
||
1734 | punpcklbw mm0,mm1 |
||
1735 | movd mm2,[esi] |
||
1736 | punpcklbw mm2,mm1 |
||
1737 | pmullw mm0,mm2 |
||
1738 | psrlw mm0,8 |
||
1739 | packuswb mm0,mm1 |
||
1740 | mov edi,.c_scr |
||
1741 | movd [edi],mm0 |
||
1742 | |||
1743 | |||
1744 | |||
1745 | |||
1746 | @@: |
||
1747 | .black: |
||
1748 | xor eax,eax |
||
1749 | mov edi,.c_scr |
||
1750 | stosd |
||
1751 | .actual_zbuff: |
||
1752 | mov eax,.cz |
||
1753 | mov edi,.czbuff |
||
1754 | stosd |
||
1755 | |||
1756 | |||
1757 | add dword .czbuff,4 |
||
1819 | yogev_ezra | 1758 | add dword .c_scr,3 |
1759 | |||
1245 | hidnplayr | 1760 | |
1761 | mov eax,.dbx |
||
1762 | add .cbx,eax |
||
1763 | mov ebx,.dby |
||
1764 | add .cby,ebx |
||
1765 | |||
1766 | |||
1767 | add .cex,edx |
||
1768 | mov eax,.dey |
||
1769 | add .cey,eax |
||
1770 | |||
1771 | |||
1772 | add .ctx,ebx |
||
1773 | mov edx,.dty |
||
1774 | add .cty,edx |
||
1775 | |||
1776 | |||
1777 | paddd mm7,.dty |
||
1819 | yogev_ezra | 1778 | paddd mm6,.dby |
1779 | paddd mm5,.dey |
||
1780 | end if |
||
1245 | hidnplayr | 1781 | mov eax,.dz |
1782 | add .cz,eax |
||
1783 | |||
1784 | |||
1785 | jnz .draw |
||
1786 | |||
1787 | |||
1788 | mov esp,ebp |
||
1789 | ret 76 |
||
1790 | ;Ext = MMX |
||
1791 | |||
1792 | |||
1793 | ; movq mm5, qword[.temp1] ;- |
||
1794 | ; paddd mm5, qword[.temp5] ; .temp5 == low dword = TEX_X, high dword = -TEX_X |
||
1795 | ; pand mm5, qword[.temp3] ; .temp3 == low = high dword = TEX_SIZE |
||
1796 | ; paddd mm5, qword[.temp4] ; .temp4 == low = high dword = offset .bmap |
||
1797 | ; movd ebx,mm5 |
||
1798 | ; psrlq mm5,32 |
||
1799 | ; end if>> |
||
1800 |