Subversion Repositories Kolibri OS

Rev

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

Rev 9237 Rev 9512
Line 2... Line 2...
2
ROUND equ 8
2
ROUND equ 8
3
;NON=0
3
;NON=0
4
;MMX=1
4
;MMX=1
5
;Ext=MMX
5
;SSE=2
-
 
6
;SSE2=3
-
 
7
 
-
 
8
;Ext=SSE2
6
;TEX_SIZE=0x3fff
9
 
-
 
10
 
-
 
11
;TEX_SIZE=0x3fff
7
;SIZE_X equ 512
12
;SIZE_X equ 512
8
;SIZE_Y equ 512
13
;SIZE_Y equ 512
9
;ROUND = 8
14
;ROUND = 8
10
;TEX_SHIFT equ 6
15
 ; TEX_SHIFT equ 6
11
 
16
 ; TEXTURE_SIZE = 0xFFFFF
-
 
17
 
Line 12... Line 18...
12
; procedure drawing textured triangle with Gouraud shading
18
; procedure drawing textured triangle with Gouraud shading
13
; Z-buffer alghoritm included, Z coord interpolation ----
19
; Z-buffer alghoritm included, Z coord interpolation ----
14
; I set the color by this way -- (col1 * col2)/256 ------
20
; I set the color by this way -- (col1 * col2)/256 ------
15
;------------------in - eax - x1 shl 16 + y1 ------------
21
;------------------in - eax - x1 shl 16 + y1 ------------
Line 62... Line 68...
62
   .y3	      equ  word[ebp-24] ;dw ? ;equ word[ebp-20]
68
   .y3        equ  word[ebp-24] ;dw ? ;equ word[ebp-20]
63
 
69
 
64
   .dx12      equ  dword[ebp-28] ;dd ?
70
   .dx12      equ  dword[ebp-28] ;dd ?
Line 65... Line 71...
65
   .tex_dx12  equ  dword[ebp-32] ;dd ?
71
   .tex_dy12  equ       [ebp-32] ;dd ?
66
   .tex_dy12  equ	[ebp-36] ;dd ?
72
   .tex_dx12  equ       [ebp-36] ;dd ?
67
   .dz12      equ  dword[ebp-40] ;dd ?
73
   .dz12      equ  dword[ebp-40] ;dd ?
68
   .dc12r     equ	[ebp-44] ;dd ?
74
   .dc12r     equ       [ebp-44] ;dd ?
69
   .dc12g     equ  dword[ebp-48] ;dd ?
75
   .dc12g     equ  dword[ebp-48] ;dd ?
70
   .dc12b     equ	[ebp-52] ;dd ?
76
   .dc12b     equ       [ebp-52] ;dd ?
71
 
77
 
Line 72... Line 78...
72
   .dx23      equ  dword[ebp-56] ;dd ?
78
   .dx23      equ  dword[ebp-56] ;dd ?
73
   .tex_dx23  equ  dword[ebp-60] ;dd ?
79
   .tex_dy23  equ       [ebp-60] ;dd ?
74
   .tex_dy23  equ	[ebp-64] ;dd ?
80
   .tex_dx23  equ       [ebp-64] ;dd ?
75
   .dz23      equ  dword[ebp-68] ;dd ?
81
   .dz23      equ  dword[ebp-68] ;dd ?
76
   .dc23r     equ	[ebp-72] ;dd ?
82
   .dc23r     equ       [ebp-72] ;dd ?
77
   .dc23g     equ  dword[ebp-76] ;dd ?
83
   .dc23g     equ  dword[ebp-76] ;dd ?
78
   .dc23b     equ	[ebp-80] ;dword[ebp-8]dd ?
84
   .dc23b     equ       [ebp-80] ;dword[ebp-8]dd ?
Line 79... Line 85...
79
 
85
 
80
   .dx13      equ  dword[ebp-84] ;dd ?
86
   .dx13      equ  dword[ebp-84] ;dd ?
81
   .tex_dx13  equ  dword[ebp-88] ;dd ?
87
   .tex_dy13  equ       [ebp-88] ;dd ?
82
   .tex_dy13  equ	[ebp-92] ;dd ?
88
   .tex_dx13  equ       [ebp-92] ;dd ?
83
   .dz13      equ  dword[ebp-96] ;dd ?
89
   .dz13      equ  dword[ebp-96] ;dd ?
84
   .dc13r     equ	[ebp-100] ;dd ?
90
   .dc13r     equ       [ebp-100] ;dd ?
85
   .dc13g     equ  dword[ebp-104] ;dd ?
91
   .dc13g     equ  dword[ebp-104] ;dd ?
Line 86... Line 92...
86
   .dc13b     equ	[ebp-108] ;dd ?
92
   .dc13b     equ       [ebp-108] ;dd ?
87
 
93
 
88
   .scan_x1   equ  dword[ebp-112] ;dd ?
94
   .scan_y1   equ       [ebp-112] ;dd ?
89
   .scan_y1   equ	[ebp-116] ;dd ?
95
   .scan_x1   equ       [ebp-116] ;dd ?
90
   .zz1       equ  dword[ebp-120] ;dw ?
96
   .zz1       equ  dword[ebp-120] ;dw ?
91
   .cur1r     equ	[ebp-124] ;dw ?
97
   .cur1r     equ       [ebp-124] ;dw ?
Line 92... Line 98...
92
   .cur1g     equ  dword[ebp-128] ;dw ?
98
   .cur1g     equ       [ebp-128] ;dw ?
93
   .cur1b     equ	[ebp-132] ;dw ?
99
   .cur1b     equ       [ebp-132] ;dw ?
94
 
100
 
95
   .scan_x2   equ  dword[ebp-136] ;dd ?
101
   .scan_y2   equ       [ebp-136] ;dd ?
96
   .scan_y2   equ	[ebp-140] ;dd ?
102
   .scan_x2   equ       [ebp-140] ;dd ?
97
   .zz2       equ  dword[ebp-144] ;dw ?
103
   .zz2       equ       [ebp-144] ;dw ?
Line 98... Line 104...
98
   .cur2r     equ	[ebp-148] ;dw ?
104
   .cur2r     equ       [ebp-148] ;dw ?
Line 99... Line -...
99
   .cur2g     equ  dword[ebp-152] ;dw ?
-
 
100
   .cur2b     equ	[ebp-156] ;dw ?
-
 
101
 
-
 
102
 
105
   .cur2g     equ       [ebp-152] ;dw ?
103
       mov    ebp,esp
-
 
104
 
-
 
-
 
106
   .cur2b     equ       [ebp-156] ;dw ?
105
   ;    mov     .tex_ptr,edx
107
 
106
   ;    mov     .z_ptr,esi
108
 
107
   ;    mov     .scr_buff,edi
109
       mov    ebp,esp
108
	 push	 edx esi edi
110
 
109
;         push    esi
111
         push    edx esi edi
Line 182... Line 184...
182
       loop	@b
184
       loop     @b
183
       jmp	.dx12_done
185
       jmp      .dx12_done
184
  .dx12_make:
186
  .dx12_make:
185
 
187
     ;  sub      esp,7*4
186
 
188
 
-
 
189
       movsx    ebx,bx
Line 187... Line -...
187
       mov	ax,.x2
-
 
188
       sub	ax,.x1
-
 
189
       cwde
-
 
190
       movsx	ebx,bx
-
 
191
       shl	eax,ROUND
190
       mov      eax,1 shl 15
192
       cdq
191
       cdq
193
       idiv	ebx
192
       idiv     ebx
194
 ;      mov      .dx12,eax
193
    ;   push     eax
195
       push	 eax
-
 
196
 
194
       mov      ebx,eax
197
if  0  ; Ext=SSE
-
 
198
       movd	 mm0,.col1r    ; 2 words  r, g
-
 
199
       pxor	 mm1,mm1
-
 
200
       punpcklwd mm0,mm1
-
 
201
       cvtpi2ps  xmm0,mm0
-
 
202
       movlhps	 xmm0,xmm0
-
 
203
       movd	 mm0,.col1g    ; 2 words  b, z
195
 
204
       punpcklwd mm0,mm1
-
 
205
       cvtpi2ps  xmm0,mm0
-
 
206
       ; xmm0=four float double words
-
 
207
       divss	 xmm0,.pack3
-
 
208
       ;convert and insert mm0 to lower xmm1     ..
-
 
209
end if
-
 
210
 
-
 
Line 211... Line -...
211
       mov	ax,word .tex_x2
-
 
212
       sub	ax,word .tex_x1
-
 
213
       cwde
-
 
214
       shl	eax,ROUND
-
 
215
       cdq
-
 
216
       idiv	ebx
-
 
217
;       mov      .tex_dx12r,eax
-
 
218
       push	  eax
-
 
Line 219... Line -...
219
 
-
 
220
       mov	  ax,word .tex_y2
-
 
221
       sub	  ax,word .tex_y1
-
 
222
       cwde
-
 
223
       shl	eax,ROUND
-
 
224
       cdq
-
 
225
       idiv	ebx
196
 
226
;       mov      .tex_dx12,eax
-
 
227
       push	eax
-
 
228
 
-
 
229
       mov	ax,word .z2
197
       mov      ax,.x2
230
       sub	ax,word .z1
-
 
231
       cwde
-
 
232
       shl	eax,CATMULL_SHIFT
-
 
233
       cdq
-
 
234
       idiv	ebx
-
 
235
 ;      mov      .dz12,eax
-
 
236
       push	eax	  ; .dza12
-
 
237
 
-
 
238
       mov	ax,word .col2r
-
 
239
       sub	ax,word .col1r
198
       sub      ax,.x1
240
       cwde
-
 
241
       shl	eax,ROUND
-
 
242
       cdq
199
       cwde
243
       idiv	ebx
200
       imul     ebx
244
 ;      mov      .dc12r,eax
201
       sar      eax,15 - ROUND
-
 
202
       push     eax
Line -... Line 203...
-
 
203
    ;   mov      .dx12,eax
-
 
204
 
-
 
205
       sub       esp,6*4
-
 
206
       movd      xmm0,ebx
-
 
207
       pshuflw   xmm0,xmm0,0
-
 
208
    ;   pshufd    xmm0,xmm0,0
245
       push	  eax
209
       movlhps   xmm0,xmm0
-
 
210
       movq      xmm1,.col1r
-
 
211
       movq      xmm2,.col2r
246
 
212
       movhps    xmm1,.tex_x1
-
 
213
       movhps    xmm2,.tex_x2
-
 
214
       psubw     xmm2,xmm1
247
       mov	  ax,word .col2g
215
       movdqa    xmm3,xmm2
-
 
216
       pmullw    xmm2,xmm0
248
       sub	  ax,word .col1g
217
       pmulhw    xmm3,xmm0
249
       cwde
218
       movhlps   xmm4,xmm2
250
       shl	eax,ROUND
219
       movhlps   xmm5,xmm3
-
 
220
       punpcklwd xmm2,xmm3
-
 
221
       punpcklwd xmm4,xmm5
-
 
222
       psrad     xmm2,15 - ROUND
251
       cdq
223
       psrad     xmm4,15 - ROUND
252
       idiv	ebx
224
       pshufd    xmm2,xmm2,11000110b
-
 
225
       movdqu    .dc12b,xmm2
-
 
226
   ;    punpcklwd xmm4,xmm5
Line 253... Line -...
253
 ;      mov      .dc12g,eax
-
 
254
       push	eax
-
 
255
 
-
 
256
       mov	ax,word .col2b	       ;;---
-
 
257
       sub	ax,word .col1b
-
 
258
       cwde
-
 
259
       shl	eax,ROUND
-
 
260
       cdq
-
 
Line 261... Line 227...
261
       idiv	ebx
227
    ;   psrad     xmm4,15 - ROUND
262
;       mov      .dc12b,eax
228
       movq      .tex_dx12,xmm4
Line 263... Line 229...
263
       push	eax
229
 
Line 275... Line 241...
275
       jmp	.dx23_done
241
       jmp      .dx23_done
276
 
242
 
277
  .dx23_make:
243
  .dx23_make:
Line 278... Line 244...
278
       mov	ax,.x3
244
       movsx    ebx,bx
279
       sub	ax,.x2
-
 
280
       cwde
-
 
281
       movsx	ebx,bx
-
 
282
       shl	eax,ROUND
245
       mov      eax,1 shl 15
283
       cdq
246
       cdq
284
       idiv	ebx
247
       idiv     ebx
285
 ;      mov      .dx23,eax
248
       mov      ebx,eax
286
       push	 eax
249
 
287
 
-
 
Line 288... Line -...
288
       mov	ax,word .tex_x3
-
 
289
       sub	ax,word .tex_x2
-
 
290
       cwde
-
 
291
       shl	eax,ROUND
-
 
292
       cdq
-
 
293
       idiv	ebx
-
 
294
;       mov      .tex_dx23,eax
-
 
295
       push	  eax
-
 
Line 296... Line 250...
296
 
250
 
297
       mov	  ax,word .tex_y3
251
       mov      ax,.x3
298
       sub	  ax,word .tex_y2
252
       sub      ax,.x2
299
       cwde
-
 
300
       shl	eax,ROUND
-
 
301
       cdq
253
       cwde
302
       idiv	ebx
254
       imul     ebx
303
;       mov      .tex_dy23,eax
255
       sar      eax,15 - ROUND
Line 304... Line 256...
304
       push	eax
256
       push     eax
305
 
257
 
306
       mov	ax,word .z3
258
       sub       esp,6*4
307
       sub	ax,word .z2
259
       movd      xmm0,ebx
308
       cwde				   ;
260
       pshuflw   xmm0,xmm0,0
309
       shl	eax,CATMULL_SHIFT	   ;  2222222
261
       movlhps   xmm0,xmm0
310
       cdq				   ;  2     2
262
       movq      xmm1,.col2r
311
       idiv	ebx			   ;        2
263
       movq      xmm2,.col3r
312
;       mov      .dz23,eax                 ;       2
264
       movhps    xmm1,.tex_x2
313
       push	eax	  ; .dza12         ;      2
265
       movhps    xmm2,.tex_x3
314
					   ;     2
266
       psubw     xmm2,xmm1
315
       mov	ax,word .col3r		   ;    2
267
       movdqa    xmm3,xmm2
316
       sub	ax,word .col2r		   ;   2222222
268
       pmullw    xmm2,xmm0
317
       cwde				   ;  second delta
269
       pmulhw    xmm3,xmm0
-
 
270
       movhlps   xmm4,xmm2
318
       shl	eax,ROUND		   ;
271
       movhlps   xmm5,xmm3
-
 
272
       punpcklwd xmm2,xmm3
-
 
273
       punpcklwd xmm4,xmm5
-
 
274
       psrad     xmm2,15 - ROUND
319
       cdq				   ;
275
       psrad     xmm4,15 - ROUND
320
       idiv	ebx			   ;
276
       pshufd    xmm2,xmm2,11000110b
Line 321... Line -...
321
;       mov      .dc23r,eax                 ;
-
 
322
       push	  eax
-
 
323
 
-
 
324
       mov	  ax,word .col3g
-
 
325
       sub	  ax,word .col2g
-
 
326
       cwde
-
 
327
       shl	eax,ROUND
-
 
328
       cdq
-
 
329
       idiv	ebx
-
 
330
;       mov      .dc23g,eax
-
 
331
       push	eax
-
 
332
 
-
 
333
       mov	ax,word .col3b	       ;;---
-
 
334
       sub	ax,word .col2b
-
 
335
       cwde
-
 
336
       shl	eax,ROUND
-
 
337
       cdq
-
 
Line 338... Line 277...
338
       idiv	ebx
277
       movdqu    .dc23b,xmm2
339
;       mov      .dc23b,eax
278
       movq      .tex_dx23,xmm4
340
       push	eax
279
 
341
 
280
 
Line 350... Line 289...
350
       loop	@b
289
       loop     @b
351
       jmp	.dx13_done
290
       jmp      .dx13_done
352
  .dx13_make:
291
  .dx13_make:
353
       mov	ax,.x3
292
       movsx    ebx,bx
354
       sub	ax,.x1
293
       mov      eax,1 shl 15
355
       cwde
-
 
356
       movsx	ebx,bx
-
 
357
       shl	eax,ROUND
-
 
358
       cdq
294
       cdq
359
       idiv	ebx
295
       idiv     ebx
360
;       mov      .dx13,eax
296
       mov      ebx,eax
361
       push	 eax
297
 
362
 
298
 
363
       mov	ax,word .tex_x3 	   ; triangle b
-
 
364
       sub	ax,word .tex_x1
-
 
365
       cwde
-
 
366
       shl	eax,ROUND
-
 
367
       cdq
-
 
368
       idiv	ebx
-
 
369
;       mov      .tex_dx13r,eax
-
 
370
       push	  eax
-
 
371
 
-
 
372
       mov	  ax,word .tex_y3
-
 
373
       sub	  ax,word .tex_y1
-
 
374
       cwde
-
 
375
       shl	eax,ROUND
-
 
376
       cdq
-
 
377
       idiv	ebx
-
 
378
;       mov      .tex_dy13,eax
-
 
379
       push	eax
-
 
380
 
-
 
381
       mov	ax,word .z3
-
 
Line 382... Line -...
382
       sub	ax,word .z1	       ;    333333333
-
 
383
       cwde			       ;   3        3
-
 
384
       shl	eax,CATMULL_SHIFT      ;            3
-
 
385
       cdq			       ;            3
-
 
386
       idiv	ebx		       ;            3
-
 
387
;       mov      .dz13,eax             ;            3
-
 
388
       push	eax	  ; .dza12     ;            3
-
 
389
				       ;            3
-
 
390
       mov	ax,word .col3r	       ;    3333333333
-
 
391
       sub	ax,word .col1r	       ;            3
-
 
392
       cwde			       ;            3
-
 
393
       shl	eax,ROUND	       ;            3
-
 
394
       cdq			       ;            3
-
 
395
       idiv	ebx		       ;            3
-
 
396
  ;    mov      .dc13r,eax             ;    3       3
-
 
397
       push	  eax		      ;     33333333
-
 
398
 
-
 
Line 399... Line -...
399
       mov	  ax,word .col3g
-
 
400
       sub	  ax,word .col1g
-
 
401
       cwde
-
 
402
       shl	eax,ROUND
-
 
403
       cdq
-
 
404
       idiv	ebx
-
 
405
 ;      mov      .dc13g,eax
299
       mov      ax,.x3
406
       push	eax
-
 
407
 
-
 
408
       mov	ax,word .col3b	       ;;---
-
 
409
       sub	ax,word .col1b
300
       sub      ax,.x1
410
       cwde
301
       cwde
411
       shl	eax,ROUND
-
 
412
       cdq
-
 
413
       idiv	ebx
302
       imul     ebx
414
;       mov      .dc13b,eax
303
       sar      eax,15 - ROUND
415
       push	eax
304
       push     eax
Line -... Line 305...
-
 
305
 
-
 
306
       sub       esp,6*4
-
 
307
       movd      xmm0,ebx
-
 
308
       pshuflw   xmm0,xmm0,0
-
 
309
       movlhps   xmm0,xmm0
-
 
310
       movq      xmm1,.col1r
-
 
311
       movq      xmm2,.col3r
-
 
312
       movhps    xmm1,.tex_x1
-
 
313
       movhps    xmm2,.tex_x3
-
 
314
       psubw     xmm2,xmm1
-
 
315
       movdqa    xmm3,xmm2
-
 
316
       pmullw    xmm2,xmm0
-
 
317
       pmulhw    xmm3,xmm0
-
 
318
       movhlps   xmm4,xmm2
-
 
319
       movhlps   xmm5,xmm3
-
 
320
       punpcklwd xmm2,xmm3
-
 
321
       punpcklwd xmm4,xmm5
-
 
322
       psrad     xmm2,15 - ROUND
-
 
323
       psrad     xmm4,15 - ROUND
-
 
324
       pshufd    xmm2,xmm2,11000110b
-
 
325
       movdqu    .dc13b,xmm2
416
 
326
       movq      .tex_dx13,xmm4
Line 417... Line 327...
417
   .dx13_done:
327
   .dx13_done:
-
 
328
 
418
 
329
; <<<<<<<  ::delta zone end+++++++++++++++++++++ >>>>>>>>
Line 419... Line 330...
419
; <<<<<<<  ::delta zone end+++++++++++++++++++++ >>>>>>>>
330
 
420
       sub	esp,55	 ;(12*4)
331
       sub      esp,(12*4)
421
 
332
 
-
 
333
       movsx    eax,.x1                    ; eax - cur x1
-
 
334
       shl      eax,ROUND                  ; ebx - cur x2
-
 
335
       mov      ebx,eax
-
 
336
 
-
 
337
 
-
 
338
       movzx    edi,word .tex_x1
-
 
339
       shl      edi,ROUND
-
 
340
       mov      .scan_x1,edi
-
 
341
       mov      .scan_x2,edi
-
 
342
    ;   push     edi
-
 
343
    ;   push     edi
-
 
344
       movzx    edx,word .tex_y1
-
 
345
       shl      edx,ROUND
-
 
346
  ;     push     edx
-
 
347
  ;     push     edx
422
       movsx	eax,.x1 		   ; eax - cur x1
348
       mov      .scan_y1,edx
423
       shl	eax,ROUND		   ; ebx - cur x2
349
       mov      .scan_y2,edx
-
 
350
 
-
 
351
       movsx    edx,word .z1
424
       mov	ebx,eax
352
       shl      edx,CATMULL_SHIFT
425
       movsx	edx,word .z1
353
   ;    push     edx
Line 426... Line 354...
426
       shl	edx,CATMULL_SHIFT
354
   ;    push     edx
427
       mov	.zz1,edx
355
       mov      .zz1,edx
Line 440... Line 368...
440
       mov	.cur1b,edx
368
       mov      .cur1b,edx
441
       mov	.cur2b,edx
369
       mov      .cur2b,edx
442
 
370
 
443
       movzx	edi,word .tex_x1
371
 
Line 444... Line -...
444
       shl	edi,ROUND
-
 
445
       mov	.scan_x1,edi
-
 
446
       mov	.scan_x2,edi
-
 
447
       movzx	edx,word .tex_y1
-
 
448
       shl	edx,ROUND
-
 
449
       mov	.scan_y1,edx
-
 
450
       mov	.scan_y2,edx
-
 
451
 
-
 
Line 452... Line 372...
452
       mov	cx,.y1
372
       mov      cx,.y1
453
       cmp	cx,.y2
373
       cmp      cx,.y2
454
       jge	.loop1_end
374
       jge      .loop1_end
455
    .loop_1:
375
    .loop_1:
456
    ;   push     eax ebx ebp
-
 
-
 
376
 
457
       pushad
377
       pushad
Line 458... Line 378...
458
 
378
 
459
       push	.tex_ptr
379
       push     .tex_ptr
460
       push	.scr_buff
380
       push     .scr_buff
461
       push	.z_ptr
381
       push     .z_ptr
Line 462... Line 382...
462
       push	cx
382
       push     cx
Line 463... Line -...
463
 
-
 
464
       push	.zz2
-
 
465
 
-
 
466
       push	.scan_x2
-
 
467
       push	dword .scan_y2
383
 
-
 
384
       push     dword .zz2
-
 
385
 
-
 
386
       push     dword .cur2b
-
 
387
       push     dword .cur2g
Line 468... Line 388...
468
       push	dword .cur2r
388
       push     dword .cur2r
Line 469... Line -...
469
       push	.cur2g
-
 
470
       push	dword .cur2b
-
 
471
 
-
 
472
       push	.zz1
-
 
473
 
389
       push     dword .scan_x2
-
 
390
       push     dword .scan_y2
-
 
391
 
-
 
392
       push      .zz1
-
 
393
 
Line 474... Line 394...
474
       push	.scan_x1
394
       push     dword .cur1b
475
       push	dword .scan_y1
395
       push     dword .cur1g
476
       push	dword .cur1r
396
       push     dword .cur1r
Line 477... Line -...
477
       push	.cur1g
-
 
-
 
397
       push     dword .scan_x1
478
       push	dword .cur1b
398
       push     dword .scan_y1
Line 479... Line -...
479
 
-
 
480
       sar	eax,ROUND
-
 
481
       sar	ebx,ROUND
-
 
482
       call	horizontal_tex_grd_line
-
 
483
 
-
 
484
      ; pop      ebp ebx eax
-
 
485
       popad
-
 
486
 
-
 
487
if (Ext = MMX)|(Ext=SSE)
-
 
488
       movq	mm0,.cur1b
-
 
489
       movq	mm1,.cur1r
-
 
490
       movq	mm2,.scan_y1
-
 
491
       movq	mm3,.cur2b
-
 
492
       movq	mm4,.cur2r
-
 
493
       movq	mm5,.scan_y2
-
 
494
       paddd	mm0,.dc13b
-
 
495
       paddd	mm1,.dc13r
-
 
496
       paddd	mm2,.tex_dy13
-
 
497
       paddd	mm3,.dc12b
-
 
498
       paddd	mm4,.dc12r
399
 
499
       paddd	mm5,.tex_dy12
-
 
500
       movq	.cur1b,mm0
400
       sar      eax,ROUND
501
       movq	.cur1r,mm1
401
       sar      ebx,ROUND
502
       movq	.scan_y1,mm2
402
       call     horizontal_tex_grd_line
503
       movq	.cur2b,mm3
403
 
504
       movq	.cur2r,mm4
404
 
505
       movq	.scan_y2,mm5
405
       popad
506
end if
406
 
507
if Ext >= SSE2
407
 
508
       movups	xmm0,.cur1b
408
       movups   xmm0,.cur1b
509
       movups	xmm1,.dc13b
409
       movups   xmm1,.dc13b
510
       movups	xmm2,.cur2b
410
       movups   xmm2,.cur2b
511
       movups	xmm3,.dc12b
411
       movups   xmm3,.dc12b
512
       movq	mm2,.scan_y1
412
       movq     mm2,.scan_x1
513
       movq	mm5,.scan_y2
413
       movq     mm5,.scan_x2
514
       paddd	xmm0,xmm1
-
 
Line 515... Line -...
515
       paddd	xmm2,xmm3
-
 
516
       paddd	mm2,.tex_dy13
-
 
517
       paddd	mm5,.tex_dy12
-
 
518
       movq	.scan_y1,mm2
-
 
519
       movq	.scan_y2,mm5
-
 
520
       movups	.cur1b,xmm0
-
 
521
       movups	.cur2b,xmm2
-
 
522
end if
-
 
523
 
-
 
524
if Ext = NON
-
 
525
       mov	edx,.dc13b
-
 
526
       add	.cur1b,edx
-
 
527
       mov	esi,.dc13g
-
 
528
       add	.cur1g,esi
414
       paddd    xmm0,xmm1
529
       mov	edi,.dc13r
-
 
530
       add	.cur1r,edi
-
 
531
       mov	edx,.dz13
-
 
532
       add	.zz1,edx
-
 
533
       mov	edx,.tex_dx13
-
 
534
       add	.scan_x1,edx
-
 
535
       mov	esi,.tex_dy13
-
 
536
       add	.scan_y1,esi
-
 
537
 
-
 
538
       mov	edi,.dc12b
-
 
539
       add	.cur2b,edi
-
 
540
       mov	esi,.dc12g
-
 
541
       add	.cur2g,esi
-
 
542
       mov	edx,.dc12r
415
       paddd    xmm2,xmm3
543
       add	.cur2r,edx
416
       paddd    mm2,.tex_dx13
544
       mov	edi,.tex_dx12
417
       paddd    mm5,.tex_dx12
545
       add	.scan_x2,edi
418
       movq     .scan_x1,mm2
546
       mov	esi,.tex_dy12
419
       movq     .scan_x2,mm5
Line 596... Line 469...
596
       push	.z_ptr
469
       push     .z_ptr
597
       push	cx
470
       push     cx
598
 
471
 
599
       push	.zz2
472
       push     dword .zz2
Line 600... Line 473...
600
 
473
 
Line 601... Line -...
601
       push	.scan_x2
-
 
602
       push	dword .scan_y2
-
 
603
       push	dword .cur2r
-
 
604
       push	.cur2g
-
 
605
       push	dword .cur2b
474
       push     dword .cur2b
-
 
475
       push     dword .cur2g
-
 
476
       push     dword .cur2r
-
 
477
       push     dword .scan_x2
-
 
478
       push     dword .scan_y2
Line 606... Line 479...
606
 
479
 
Line 607... Line -...
607
       push	.zz1
-
 
608
 
-
 
609
       push	.scan_x1
-
 
610
       push	dword .scan_y1
-
 
611
       push	dword .cur1r
480
       push      .zz1
-
 
481
 
-
 
482
       push     dword .cur1b
-
 
483
       push     dword .cur1g
-
 
484
       push     dword .cur1r
Line 612... Line 485...
612
       push	.cur1g
485
       push     dword .scan_x1
613
       push	dword .cur1b
486
       push     dword .scan_y1
614
 
487
 
Line 615... Line 488...
615
       sar	eax,ROUND
488
       sar      eax,ROUND
Line 616... Line -...
616
       sar	ebx,ROUND
-
 
617
       call	horizontal_tex_grd_line
-
 
618
 
-
 
619
       popad
-
 
620
 
-
 
621
if (Ext = MMX)|(Ext=SSE)
-
 
622
       movq	mm0,.cur1b
-
 
623
       movq	mm1,.cur1r
-
 
624
       movq	mm2,.scan_y1
-
 
625
       movq	mm3,.cur2b
-
 
626
       movq	mm4,.cur2r
-
 
627
       movq	mm5,.scan_y2
-
 
628
       paddd	mm0,.dc13b
-
 
629
       paddd	mm1,.dc13r
-
 
630
       paddd	mm2,.tex_dy13
-
 
631
       paddd	mm3,.dc23b
-
 
632
       paddd	mm4,.dc23r
-
 
633
       paddd	mm5,.tex_dy23
-
 
634
       movq	.cur1b,mm0
-
 
635
       movq	.cur1r,mm1
489
       sar      ebx,ROUND
636
       movq	.scan_y1,mm2
-
 
637
       movq	.cur2b,mm3
490
       call     horizontal_tex_grd_line
638
       movq	.cur2r,mm4
491
 
639
       movq	.scan_y2,mm5
492
       popad
640
end if
493
 
641
if Ext >= SSE2
494
 
642
       movups	xmm0,.cur1b
495
       movups   xmm0,.cur1b
643
       movups	xmm1,.dc13b
496
       movups   xmm1,.dc13b
644
       movups	xmm2,.cur2b
497
       movups   xmm2,.cur2b
645
       movups	xmm3,.dc23b
498
       movups   xmm3,.dc23b
646
       movq	mm2,.scan_y1
499
       movq     mm2,.scan_x1
647
       movq	mm5,.scan_y2
500
       movq     mm5,.scan_x2
648
       paddd	xmm0,xmm1
501
       paddd    xmm0,xmm1
649
       paddd	xmm2,xmm3
502
       paddd    xmm2,xmm3
650
       paddd	mm2,.tex_dy13
503
       paddd    mm2,.tex_dx13
651
       paddd	mm5,.tex_dy23
-
 
652
       movq	.scan_y1,mm2
-
 
653
       movq	.scan_y2,mm5
-
 
654
       movups	.cur1b,xmm0
-
 
655
       movups	.cur2b,xmm2
-
 
656
end if
-
 
657
if Ext = NON
-
 
658
       mov	edx,.dc13b
-
 
659
       add	.cur1b,edx
-
 
660
       mov	esi,.dc13g
-
 
661
       add	.cur1g,esi
-
 
662
       mov	edi,.dc13r
-
 
663
       add	.cur1r,edi
-
 
664
       mov	edx,.tex_dx13
-
 
665
       add	.scan_x1,edx
504
       paddd    mm5,.tex_dx23
666
       mov	esi,.tex_dy13
-
 
667
       add	.scan_y1,esi
-
 
668
       mov	edx,.dz13
-
 
669
       add	.zz1,edx
-
 
670
 
-
 
671
       mov	edi,.dc23b
-
 
672
       add	.cur2b,edi
-
 
673
       mov	esi,.dc23g
-
 
674
       add	.cur2g,esi
-
 
675
       mov	edx,.dc23r
-
 
676
       add	.cur2r,edx
-
 
677
       mov	edi,.tex_dx23
-
 
678
       add	.scan_x2,edi
-
 
679
       mov	esi,.tex_dy23
505
       movq     .scan_x1,mm2
680
       add	.scan_y2,esi
506
       movq     .scan_x2,mm5
681
       mov	edx,.dz23
507
       movups   .cur1b,xmm0
682
       add	.zz2,edx
508
       movups   .cur2b,xmm2
683
end if
509
 
Line 700... Line 526...
700
.y	  equ [ebp+52]
526
.y        equ [ebp+52]
701
 
527
 
702
.z2	equ [ebp+48]
528
.z2     equ [ebp+48]
Line 703... Line 529...
703
.tex_x2 equ [ebp+44]
529
.b2     equ [ebp+44]
704
.tex_y2 equ [ebp+40]
530
.g2     equ [ebp+40]
705
.r2	equ [ebp+36]
531
.r2     equ [ebp+36]
706
.g2	equ [ebp+32]
532
.tex_x2 equ [ebp+32]
707
.b2	equ [ebp+28]
533
.tex_y2 equ [ebp+28]
708
 
534
 
-
 
535
 
Line 709... Line 536...
709
.z1	equ [ebp+24]
536
.z1     equ [ebp+24]
710
.tex_x1 equ [ebp+20]
537
.b1     equ [ebp+20]
711
.tex_y1 equ [ebp+16]
538
.g1     equ [ebp+16]
712
.r1	equ [ebp+12]
539
.r1     equ [ebp+12]
713
.g1	equ [ebp+8]
540
.tex_x1 equ [ebp+8]
714
.b1	equ [ebp+4]
541
.tex_y1 equ [ebp+4]
-
 
542
 
Line 715... Line 543...
715
 
543
 
716
.x1 equ  word[ebp-2]
544
.x1 equ  word[ebp-2]
717
.x2 equ  word[ebp-4]
545
.x2 equ  word[ebp-4]
718
.dz equ dword[ebp-8]
546
.dz equ dword[ebp-8]
719
.db equ dword[ebp-12]
547
.db equ [ebp-12]
720
.dg equ dword[ebp-16]
548
.dg equ dword[ebp-16]
721
.dr equ dword[ebp-20]
549
.dr equ [ebp-20]
722
.dtex_x equ dword[ebp-24]
550
.dtex_x equ dword[ebp-24]
723
.dtex_y equ dword[ebp-28]
-
 
724
 
-
 
725
.c_ty equ [ebp-32]
-
 
726
.c_tx equ [ebp-36]
-
 
727
.cb  equ  [ebp-40]
-
 
728
.cg  equ  [ebp-44]
-
 
729
.cr  equ  [ebp-48]
-
 
730
.t_col equ [ebp-52]
-
 
731
 
-
 
732
.dtex_yM equ qword[ebp-28]
-
 
733
.drM equ qword[ebp-20]
-
 
Line 734... Line 551...
734
.dbM equ qword[ebp-12]
551
.dtex_y equ [ebp-28]
735
 
-
 
-
 
552
 
Line 736... Line 553...
736
	mov	ebp,esp
553
        mov     ebp,esp
737
  ;      sub     esp,30
554
 
738
 
555
 
Line 749... Line 566...
749
 
566
 
750
	xchg	eax,ebx
567
        xchg    eax,ebx
Line 751... Line 568...
751
 
568
 
Line 752... Line -...
752
if Ext=NON
-
 
753
	mov	ecx,dword .r1
-
 
754
	xchg	ecx, .r2
-
 
755
	mov	dword .r1, ecx
-
 
756
 
-
 
757
	mov	ecx,dword .g1
-
 
758
	xchg	ecx, .g2
-
 
759
	mov	dword .g1, ecx
-
 
760
 
-
 
761
	mov	ecx,dword .b1
-
 
762
	xchg	ecx, .b2
-
 
763
	mov	dword .b1, ecx
-
 
764
 
-
 
765
	mov	ecx,dword .tex_x1
-
 
766
	xchg	ecx, .tex_x2
-
 
767
	mov	dword .tex_x1, ecx
-
 
768
 
-
 
769
	mov	ecx,dword .tex_y1
-
 
770
	xchg	ecx, .tex_y2
-
 
771
	mov	dword .tex_y1, ecx
-
 
772
 
-
 
773
	mov	ecx,dword .z1
-
 
774
	xchg	ecx, .z2
-
 
775
	mov	dword .z1, ecx
-
 
776
end if
-
 
777
if (Ext=MMX)
-
 
778
	movq	mm0,.b1        ; b, g
-
 
779
	movq	mm1,.b2
-
 
780
	movq	.b1, mm1
-
 
781
	movq	.b2, mm0
-
 
782
	movq	mm2,.r1        ; r, y
-
 
783
	movq	mm3,.r2
-
 
784
	movq	.r1,mm3
-
 
785
	movq	.r2,mm2
-
 
786
	movq	mm4,.tex_x1    ; x, z
-
 
787
	movq	mm5,.tex_x2
-
 
788
	movq	.tex_x1,mm5
-
 
789
	movq	.tex_x2,mm4
-
 
Line 790... Line -...
790
 
-
 
791
end if
-
 
792
if Ext>=SSE
569
 
793
       movups  xmm0,.b1
570
       movdqu  xmm0,.tex_y1
794
       movups  xmm1,.b2
571
       movdqu  xmm1,.tex_y2
795
       movups  .b1,xmm1
572
       movdqu  .tex_y1,xmm1
796
       movups  .b2,xmm0
573
       movdqu  .tex_y2,xmm0
797
       movq    mm4,.tex_x1    ; x, z
574
       movq    xmm4,.b1    ; x, z
798
       movq    mm5,.tex_x2
575
       movq    xmm5,.b2
799
       movq    .tex_x1,mm5
576
       movq    .b1,xmm5
800
       movq    .tex_x2,mm4
577
       movq    .b2,xmm4
Line 801... Line 578...
801
end if
578
 
802
 
579
 
803
    @@:
580
    @@:
804
	or	bx,bx
581
        or      bx,bx
805
	jle	.quit_l
582
        jle     .quit_l
Line 806... Line 583...
806
	cmp	ax,word[size_x_var]  ;SIZE_X
583
        cmp     ax,word[size_x_var]  ;SIZE_X
807
	jge	.quit_l
584
        jge     .quit_l
808
 
-
 
809
	push	ax
-
 
810
	push	bx
-
 
811
 
585
 
812
	mov	eax,.z2 	   ; delta zone************
586
        push    ax
813
	sub	eax,.z1
587
        push    bx
-
 
588
if 1
814
	cdq
589
        mov     bx,.x2
-
 
590
        sub     bx,.x1
-
 
591
 
815
	mov	bx,.x2
592
        movsx    ebx,bx
-
 
593
        mov      eax,1 shl 15
-
 
594
        cdq
-
 
595
        idiv     ebx
-
 
596
        mov      ebx,eax
-
 
597
 
-
 
598
 
-
 
599
        mov     eax,.z2            ; delta zone************
816
	sub	bx,.x1
600
        sub     eax,.z1
Line 817... Line 601...
817
	movsx	ebx,bx
601
        imul    ebx
818
	idiv	ebx
602
        sar     eax,15
819
	push	eax  ; .dz
-
 
820
 
603
        push    eax  ; .dz
-
 
604
 
821
	mov	eax,.b2
605
        mov     eax,.b2
Line 822... Line 606...
822
	sub	eax,.b1
606
        sub     eax,.b1
823
	cdq
607
        imul    ebx
824
	idiv	ebx
-
 
825
	push	eax  ; .db
608
        sar     eax,15
-
 
609
        push    eax
826
 
610
 
Line 827... Line 611...
827
	mov	eax,.g2
611
        mov     eax,.g2
828
	sub	eax,.g1
612
        sub     eax,.g1
829
	cdq
-
 
830
	idiv	ebx
613
        imul    ebx
-
 
614
        sar     eax,15
831
	push	eax  ; .dg
615
        push    eax  ; .dz
Line 832... Line 616...
832
 
616
 
833
	mov	eax,.r2
617
        mov     eax,.r2
834
	sub	eax,.r1
-
 
835
	cdq
618
        sub     eax,.r1
836
	idiv	ebx
619
        imul    ebx
-
 
620
        sar     eax,15
Line 837... Line 621...
837
	push	eax  ; .dr
621
        push    eax
838
 
622
 
-
 
623
        mov     eax,.tex_x2
-
 
624
        sub     eax,.tex_x1
-
 
625
        imul    ebx
-
 
626
        sar     eax,15
-
 
627
        push    eax
839
	mov	eax,.tex_x2
628
 
840
	sub	eax,.tex_x1
629
        mov     eax,.tex_y2
-
 
630
        sub     eax,.tex_y1
-
 
631
        imul    ebx
-
 
632
        sar     eax,15
-
 
633
        push    eax
-
 
634
 
-
 
635
 
-
 
636
end if
-
 
637
if 0
-
 
638
       sub       esp,6*4
-
 
639
       movd      xmm0,ebx
-
 
640
       pshuflw   xmm0,xmm0,0
-
 
641
       movlhps   xmm0,xmm0
-
 
642
       movdqu    xmm1,.tex_y1
-
 
643
       movdqu    xmm2,.tex_y2
-
 
644
       movq      xmm3,.b1
-
 
645
       movq      xmm4,.b2
-
 
646
       psubd     xmm4,xmm3
-
 
647
       psubd     xmm2,xmm1
-
 
648
       packssdw  xmm2,xmm4
-
 
649
  ;     packlssdw  xmm2,xmm2
-
 
650
   ;    movlhps   xmm2,xmm4
-
 
651
 
-
 
652
 
-
 
653
   ;    psubw     xmm2,xmm1
-
 
654
       movdqa    xmm3,xmm2
-
 
655
       pmullw    xmm2,xmm0
841
	cdq
656
       pmulhw    xmm3,xmm0
-
 
657
       movhlps   xmm4,xmm2
-
 
658
       movhlps   xmm5,xmm3
-
 
659
       punpcklwd xmm2,xmm3
-
 
660
       punpcklwd xmm4,xmm5
Line 842... Line 661...
842
	idiv	ebx
661
       psrad     xmm2,15 - ROUND
843
	push	eax  ; .dtex_x
662
       psrad     xmm4,15 - ROUND
Line 844... Line 663...
844
 
663
   ;    pshufd    xmm2,xmm2,11000110b
Line 902... Line 721...
902
	movzx	  ecx,cx
721
        movzx     ecx,cx
903
 
722
 
904
; init current variables
723
; init current variables
Line 905... Line 724...
905
	push	  dword .tex_y1
724
        movdqu    xmm0,.r1
906
;if  Ext=NON
725
        movdqu    xmm1,.dr
907
	push	  dword .tex_x1
726
        pxor      xmm2,xmm2
-
 
727
        movq      xmm4,.dtex_y
-
 
728
        movq      xmm5,.tex_y1
908
 
729
 
Line 909... Line -...
909
	push	  dword .b1
-
 
910
	push	  dword .g1
-
 
911
	push	  dword .r1
-
 
912
 
-
 
913
if Ext>=MMX
-
 
914
	movq	  mm4,.cr  ; lo -> r,g
-
 
915
	movq	  mm6,.cb  ; hi -> b, tex_x
-
 
916
	pxor	  mm0,mm0
-
 
917
end if
-
 
918
	mov	  ebx,.z1
730
        mov       ebx,.z1
919
      .ddraw:
731
      .ddraw:
920
	cmp	  ebx,dword[esi]
732
        cmp       ebx,dword[esi]
921
	jge	  @f
733
        jge       @f
922
	mov	  eax,.c_ty
734
        movdqa    xmm6,xmm5
923
;  if ROUND
735
        psrld     xmm6,ROUND
924
;        shl        eax,TEX_SHIFT-ROUND
736
        movd      eax,xmm6
925
;  end if
-
 
926
;  if ROUND>TEX_SHIFT
737
        psrldq    xmm6,4
927
;        shr        eax,ROUND-TEX_SHIFT
738
        movd      edx,xmm6
928
;  end if
-
 
929
	shr	  eax,ROUND
-
 
930
	shl	  Eax,TEX_SHIFT
739
        shl       eax,TEX_SHIFT
-
 
740
 
931
	mov	  edx,.c_tx   ; calc texture pixel mem addres
741
   ; calc texture pixel mem addres
932
	shr	  edx,ROUND
742
 
933
	add	  eax,edx
743
       add       eax,edx
934
	and	  eax,TEXTURE_SIZE   ; cutting
744
       and       eax,TEXTURE_SIZE   ; cutting
935
	lea	  eax,[3*eax]
745
       lea       eax,[3*eax]
936
	add	  eax,.tex_ptr
746
       add       eax,.tex_ptr
937
	mov	  dword[esi],ebx
747
       mov       dword[esi],ebx
938
if    Ext = NON
-
 
939
	mov	  eax,dword[eax]
-
 
940
 ;      mov        .tex_col,eax
-
 
941
	push	  ax
-
 
942
	shl	  eax,8
-
 
943
	pop	  ax
-
 
944
	mov	  edx,.cr
-
 
945
	sar	  edx,ROUND
-
 
946
	mul	  dl	     ; al*dl
-
 
947
	shr	  ax,8
-
 
948
	stosb
-
 
949
	ror	  eax,16
-
 
950
	push	  ax
-
 
951
	mov	  edx,.cg
-
 
952
	sar	  edx,ROUND
-
 
953
	mul	  dl
-
 
954
	shr	  ax,8
-
 
955
	stosb
-
 
956
	pop	  ax
-
 
957
	shr	  ax,8
-
 
958
	mov	  edx,.cb
-
 
959
	sar	  edx,ROUND
-
 
960
	mul	  dl
-
 
961
	shr	  ax,8
-
 
962
	stosb
-
 
963
	jmp	  .no_skip
-
 
964
else
748
 
965
	movd	  mm1,[eax]
749
       movd      xmm7,[eax]
966
	punpcklbw mm1,mm0
750
       punpcklbw xmm7,xmm2
967
	movq	  mm3,mm4  ;.cr     ; lo -> r,g
751
       movdqa    xmm3,xmm0   ; calc col
968
	movq	  mm5,mm6  ;.cb     ; lo -> b,tex_x
-
 
969
	psrld	  mm3,ROUND  ;
752
       psrld     xmm3,ROUND  ;
970
	psrld	  mm5,ROUND  ;
-
 
971
	packssdw  mm3,mm5
753
       packssdw  xmm3,xmm3
972
	pmullw	  mm1,mm3
754
       pmullw    xmm7,xmm3
973
	psrlw	  mm1,8
755
       psrlw     xmm7,8
974
	packuswb  mm1,mm0
756
       packuswb  xmm7,xmm7
975
	movd	  [edi],mm1
757
       movd      [edi],xmm7
976
end if
758
 
977
       mov	  dword[esi],ebx
759
       mov        dword[esi],ebx
978
if Ext = NON
-
 
979
       jmp	  .no_skip
-
 
980
end if
-
 
981
     @@:
760
     @@:
982
       add	  edi,3
761
       add        edi,3
983
     .no_skip:
-
 
984
       add	  esi,4
762
       add        esi,4
985
       add	  ebx,.dz
763
       add        ebx,.dz
-
 
764
       paddd      xmm5,xmm4
-
 
765
       paddd      xmm0,xmm1
Line 986... Line -...
986
 
-
 
987
       mov	  eax,.dtex_x
-
 
988
       add	  .c_tx, eax
-
 
989
       mov	  edx,.dtex_y
-
 
990
       add	  .c_ty, edx
-
 
991
if Ext=NON
-
 
992
       mov	  eax,.dr
-
 
993
       add	  .cr,eax
-
 
994
       mov	  edx,.dg
-
 
995
       add	  .cg,edx
-
 
996
       mov	  eax,.db
-
 
997
       add	  .cb,eax
-
 
998
 
-
 
999
else
-
 
1000
	paddd	   mm4,.drM
-
 
1001
	paddd	   mm6,.dbM
-
 
1002
;;        paddd      mm7,.dtex_y      ; mm4 - b, g
-
 
1003
;;        movq       .c_tx,mm7
-
 
1004
				    ; mm6 - r, x
-
 
1005
end if				    ; mm7 - y, x
-
 
1006
 
-
 
1007
       dec	ecx
766
 
Line 1008... Line 767...
1008
       jnz	.ddraw
767
       loop     .ddraw
Line 1009... Line 768...
1009
 
768
 
1010
  .quit_l:
769
  .quit_l:
-
 
770
 
-
 
771
        mov     esp,ebp
-
 
772
ret 42+20  ; horizontal line