Subversion Repositories Kolibri OS

Rev

Rev 877 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
808 serge 1
 
877 serge 2
{
3
     local_pixmap_t *dstpixmap;
4
     clip_t clip;
5
     int x0, y0, x1, y1;
6
808 serge 7
 
877 serge 8
9
 
10
     y0 = draw->y0;
11
12
 
13
     y1 = draw->y1;
14
15
 
16
     clip.ymin = 0;
17
     clip.xmax = dstpixmap->width-1;
18
     clip.ymax = dstpixmap->height-1;
19
20
 
21
     {
22
        u32_t efl;
23
        u32_t *ring, write;
24
25
 
26
27
 
28
29
 
30
31
 
32
               rhd.gui_control             |
33
               R5XX_GMC_BRUSH_SOLID_COLOR  |
34
               R5XX_GMC_SRC_DATATYPE_COLOR |
35
               R5XX_GMC_CLR_CMP_CNTL_DIS   |
36
               R5XX_GMC_WR_MSK_DIS         |
37
               R5XX_ROP3_P
38
              );
39
40
 
41
42
 
43
        OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset);
44
45
 
46
        OUTREG(R5XX_DST_LINE_END,(y1<<16)|x1);
47
#else
48
       BEGIN_RING();
49
         OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_POLYLINE, 4));
50
         OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
51
                  RADEON_GMC_BRUSH_SOLID_COLOR      |
52
                  RADEON_GMC_DST_32BPP              |
53
                  RADEON_GMC_SRC_DATATYPE_COLOR     |
54
                  R5XX_GMC_CLR_CMP_CNTL_DIS         |
55
                  R5XX_GMC_WR_MSK_DIS               |
56
                  R5XX_ROP3_P);
57
58
 
59
         OUT_RING(draw->color);
60
         OUT_RING((y0<<16)|x0);
61
         OUT_RING((y1<<16)|x1);
62
       COMMIT_RING();
63
64
 
65
        safe_sti(efl);
66
     };
67
     return ERR_OK;
68
}
69
70
 
808 serge 71
{
72
     int x0, y0, x1, y1, xend, yend;
878 serge 73
808 serge 74
 
876 serge 75
     clip_t dst_clip;
76
817 serge 77
 
876 serge 78
817 serge 79
 
876 serge 80
     y0 = draw->y0;
81
808 serge 82
 
878 serge 83
     y1 = yend = y0 + draw->h - 1;
84
808 serge 85
 
876 serge 86
     dst_clip.ymin = 0;
87
     dst_clip.xmax = dstpixmap->width-1;
88
     dst_clip.ymax = dstpixmap->height-1;
89
90
 
91
 
808 serge 92
//             x0, y0, x1, y1, draw->color);
93
94
 
876 serge 95
     {
96
        u32_t *ring, write;
97
        u32_t ifl;
98
        int w, h;
99
808 serge 100
 
878 serge 101
        h = y1 - y0 + 1;
102
808 serge 103
 
876 serge 104
808 serge 105
 
813 serge 106
812 serge 107
 
876 serge 108
812 serge 109
 
876 serge 110
               rhd.gui_control              |
111
               R5XX_ROP3_P                  |
112
               R5XX_GMC_BRUSH_SOLID_COLOR   |
113
               R5XX_GMC_SRC_DATATYPE_COLOR  |
114
               R5XX_GMC_CLR_CMP_CNTL_DIS    |
115
               R5XX_GMC_WR_MSK_DIS
116
              );
117
812 serge 118
 
876 serge 119
        OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM);
120
        OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset);
121
        OUTREG(R5XX_DST_Y_X,(y0<<16)|x0);
878 serge 122
        OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|h);
876 serge 123
878 serge 124
 
125
        {
126
           OUTREG(R5XX_DP_BRUSH_FRGD_CLR, draw->border);
127
128
 
129
           {
130
              R5xxFIFOWait(2);
131
132
 
133
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|1);
134
              y0++;
135
              h--;
136
           }
137
           if( y1 == yend )
138
           {
139
              R5xxFIFOWait(2);
140
141
 
142
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|1);
143
              h--;
144
           }
145
           if( x0 == draw->x0)
146
           {
147
              R5xxFIFOWait(2);
148
149
 
150
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(1<<16)|h);
151
           }
152
           if( x1 == xend)
153
           {
154
              R5xxFIFOWait(2);
155
156
 
157
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(1<<16)|h);
158
           }
159
        };
160
#else
812 serge 161
      BEGIN_RING();
876 serge 162
        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_MULTI, 4));
163
812 serge 164
 
876 serge 165
                 RADEON_GMC_BRUSH_SOLID_COLOR      |
166
                 RADEON_GMC_DST_32BPP              |
167
                 RADEON_GMC_SRC_DATATYPE_COLOR     |
168
                 R5XX_GMC_CLR_CMP_CNTL_DIS         |
169
                 R5XX_GMC_WR_MSK_DIS               |
170
                 R5XX_ROP3_P
171
                );
172
808 serge 173
 
876 serge 174
        OUT_RING(draw->color);
175
        OUT_RING((draw->x0<<16)|y0);
176
        OUT_RING((w<<16)|h);
177
      COMMIT_RING();
178
#endif
812 serge 179
        safe_sti(ifl);
876 serge 180
     };
181
     return ERR_OK;
182
}
808 serge 183
184
 
185
{
186
     local_pixmap_t *dstpixmap;
876 serge 187
     clip_t dst_clip;
188
     int x0, y0, x1, y1;
189
808 serge 190
 
876 serge 191
817 serge 192
 
876 serge 193
     y0 = fill->y;
194
808 serge 195
 
876 serge 196
     y1 = y0+fill->h-1;
197
808 serge 198
 
876 serge 199
     dst_clip.ymin = 0;
200
     dst_clip.xmax = dstpixmap->width-1;
201
     dst_clip.ymax = dstpixmap->height-1;
202
203
 
808 serge 204
//             x0, y0, x1, y1);
205
206
 
876 serge 207
     {
208
        u32_t *ring, write;
209
        u32_t ifl = safe_cli();
210
808 serge 211
 
813 serge 212
812 serge 213
 
876 serge 214
        int h = y1-y0+1;
215
216
 
217
218
 
219
               RADEON_GMC_DST_PITCH_OFFSET_CNTL |
220
               R5XX_GMC_BRUSH_8X8_MONO_FG_BG    |
221
               RADEON_GMC_DST_32BPP             |
222
               R5XX_GMC_SRC_DATATYPE_COLOR      |
223
               R5XX_GMC_CLR_CMP_CNTL_DIS        |
224
               R5XX_GMC_WR_MSK_DIS              |
225
               R5XX_ROP3_P
226
               );
227
228
 
229
        OUTREG(R5XX_DP_BRUSH_FRGD_CLR, fill->fcolor);
230
231
 
232
        OUTREG(R5XX_BRUSH_DATA1, fill->bmp1);
233
234
 
235
        OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset);
236
237
 
238
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(h<<16)|w);
239
#else
812 serge 240
      BEGIN_RING();
876 serge 241
        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7));
242
        OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL    |
243
                 R5XX_GMC_BRUSH_8X8_MONO_FG_BG       |
244
                 RADEON_GMC_DST_32BPP                |
245
                 RADEON_GMC_SRC_DATATYPE_COLOR       |
246
                 R5XX_GMC_CLR_CMP_CNTL_DIS           |
247
                 R5XX_GMC_WR_MSK_DIS                 |
248
                 R5XX_ROP3_P
249
                );
250
812 serge 251
 
876 serge 252
        OUT_RING(fill->bkcolor);
253
        OUT_RING(fill->fcolor);
254
808 serge 255
 
876 serge 256
        OUT_RING(fill->bmp1);
257
808 serge 258
 
876 serge 259
        OUT_RING((y1<<16)|x1);
260
      COMMIT_RING();
261
808 serge 262
 
812 serge 263
        safe_sti(ifl);
876 serge 264
     };
265
     return ERR_OK;
266
};
267
812 serge 268
 
876 serge 269
int Blit(blit_t *blit)
810 serge 270
{
271
  int x0, y0, x1, y1;
272
808 serge 273
 
810 serge 274
  y0 = blit->src_y;
275
808 serge 276
 
810 serge 277
  y1 = y0+blit->h-1;
278
279
 
280
 
876 serge 281
  {
810 serge 282
     u32 *ring, write;
283
     int w, h;
284
     u32 ifl;
285
286
 
287
     h = y1-y0+1;
288
289
 
290
291
 
813 serge 292
812 serge 293
 
294
 
295
296
 
810 serge 297
       OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5));
298
299
 
300
                RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
301
                RADEON_GMC_BRUSH_NONE             |
302
                RADEON_GMC_DST_32BPP              |
303
                RADEON_GMC_SRC_DATATYPE_COLOR     |
304
                RADEON_DP_SRC_SOURCE_MEMORY       |
305
                (1 << 28)+(1 << 30) | R5XX_ROP3_S);
306
307
 
308
       OUT_RING(rhd.dst_pitch_offset);
309
310
 
311
       OUT_RING((blit->dst_x<<16)|blit->dst_y);
312
       OUT_RING((w<<16)|h);
313
     COMMIT_RING();
314
315
 
812 serge 316
317
 
810 serge 318
  } ;
319
  return ERR_OK;
817 serge 320
}
810 serge 321
322
 
813 serge 323
808 serge 324
 
815 serge 325
 
876 serge 326
327
 
817 serge 328
{
329
   pixmap_t *pixmap;
829 serge 330
   size_t    size;
331
   void     *usermap;
332
815 serge 333
 
829 serge 334
815 serge 335
 
829 serge 336
     return ERR_PARAM;
337
   else
338
     pixmap = io->pixmap;
339
817 serge 340
 
829 serge 341
     return ERR_PARAM;
342
817 serge 343
 
829 serge 344
   if (usermap = UserAlloc(size))
345
   {
346
     CommitPages(usermap, ((u32_t)pixmap->raw+rhd.PhisBase)|7|(1<<9), size);
347
     pixmap->flags |= PX_LOCK;
348
     pixmap->usermap = usermap;
349
     io->usermap = usermap;
350
     io->pitch   = pixmap->pitch;
351
     dbgprintf("map at %x\n", io->usermap);
352
817 serge 353
 
829 serge 354
   }
355
   else
356
     return ERR_PARAM;
357
};
817 serge 358
359
 
818 serge 360
{
361
  pixmap_t *pixmap;
362
  size_t    size;
363
817 serge 364
 
818 serge 365
366
 
367
    return ERR_PARAM;
368
  else
369
    pixmap = io->pixmap;
370
371
 
372
    return ERR_PARAM;
373
374
 
868 serge 375
376
 
377
      ((u32_t)pixmap->usermap >= 0x80000000) ||
378
      ((u32_t)pixmap->usermap & 4095)
379
    )
380
    return ERR_PARAM;
381
382
 
818 serge 383
384
 
385
  UserFree(pixmap->usermap);
386
  pixmap->usermap =  NULL;
387
  pixmap->flags  &= ~PX_LOCK;
388
  io->usermap     =  NULL;
389
  io->pitch       =  0;
390
391
 
392
};
393
394
 
876 serge 395
818 serge 396
 
815 serge 397
{
398
     clip_t src_clip, dst_clip;
876 serge 399
815 serge 400
 
876 serge 401
     local_pixmap_t *dstpixmap;
402
815 serge 403
 
817 serge 404
815 serge 405
 
406
     srcpixmap = (blit->srcpix == (void*)-1) ? &scr_pixmap : blit->srcpix ;
407
408
 
817 serge 409
815 serge 410
 
817 serge 411
     //dbgprintf("src.width: %d src.height: %d\n", srcpixmap->width,srcpixmap->height);
412
     //dbgprintf("srcpitch: %x dstpitch: %x\n",
413
     //           srcpixmap->pitch_offset,dstpixmap->pitch_offset);
414
815 serge 415
 
876 serge 416
     src_clip.ymin = 0;
417
     src_clip.xmax = srcpixmap->width-1;
418
     src_clip.ymax = srcpixmap->height-1;
419
815 serge 420
 
876 serge 421
     dst_clip.ymin = 0;
422
     dst_clip.xmax = dstpixmap->width-1;
423
     dst_clip.ymax = dstpixmap->height-1;
424
425
 
426
                    &src_clip, &blit->src_x, &blit->src_y,
427
                    &blit->w, &blit->h) )
428
     {
429
        u32_t *ring, write;
430
431
 
432
433
 
868 serge 434
815 serge 435
 
876 serge 436
868 serge 437
 
876 serge 438
               RADEON_GMC_SRC_PITCH_OFFSET_CNTL  |
439
               RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
440
               RADEON_GMC_BRUSH_NONE             |
441
               RADEON_GMC_DST_32BPP              |
442
               RADEON_GMC_SRC_DATATYPE_COLOR     |
443
               RADEON_DP_SRC_SOURCE_MEMORY       |
444
               R5XX_GMC_CLR_CMP_CNTL_DIS         |
445
               R5XX_GMC_WR_MSK_DIS               |
446
               R5XX_ROP3_S
447
              );
448
868 serge 449
 
876 serge 450
868 serge 451
 
876 serge 452
        OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset);
453
868 serge 454
 
876 serge 455
        OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x);
456
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w);
457
868 serge 458
 
459
460
 
876 serge 461
          OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5));
462
815 serge 463
 
876 serge 464
                   RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
465
                   RADEON_GMC_BRUSH_NONE             |
466
                   RADEON_GMC_DST_32BPP              |
467
                   RADEON_GMC_SRC_DATATYPE_COLOR     |
468
                   RADEON_DP_SRC_SOURCE_MEMORY       |
469
                   R5XX_GMC_CLR_CMP_CNTL_DIS         |
470
                   R5XX_GMC_WR_MSK_DIS               |
471
                   R5XX_ROP3_S
472
                  );
473
815 serge 474
 
876 serge 475
          OUT_RING(dstpixmap->pitch_offset);
476
815 serge 477
 
876 serge 478
          OUT_RING((blit->dst_x<<16)|blit->dst_y);
479
          OUT_RING((blit->w<<16)|blit->h);
480
        COMMIT_RING();
481
815 serge 482
 
868 serge 483
       safe_sti(ifl);
876 serge 484
     };
485
     return ERR_OK;
486
};
487
868 serge 488
 
829 serge 489
 
490
{
491
     clip_t src_clip, dst_clip;
876 serge 492
829 serge 493
 
876 serge 494
     local_pixmap_t *dstpixmap;
495
829 serge 496
 
868 serge 497
829 serge 498
 
499
     srcpixmap = (blit->srcpix == (void*)-1) ? &scr_pixmap : blit->srcpix ;
500
501
 
502
503
 
504
     //dbgprintf("src.width: %d src.height: %d\n", srcpixmap->width,srcpixmap->height);
505
     //dbgprintf("srcpitch: %x dstpitch: %x\n",
506
     //           srcpixmap->pitch_offset,dstpixmap->pitch_offset);
507
     src_clip.xmin = 0;
876 serge 508
     src_clip.ymin = 0;
509
     src_clip.xmax = srcpixmap->width-1;
510
     src_clip.ymax = srcpixmap->height-1;
511
829 serge 512
 
876 serge 513
     dst_clip.ymin = 0;
514
     dst_clip.xmax = dstpixmap->width-1;
515
     dst_clip.ymax = dstpixmap->height-1;
516
829 serge 517
 
876 serge 518
                    &src_clip, &blit->src_x, &blit->src_y,
519
                    &blit->w, &blit->h) )
520
     {
521
        u32_t *ring, write;
522
523
 
524
525
 
868 serge 526
527
 
876 serge 528
868 serge 529
 
876 serge 530
               RADEON_GMC_SRC_PITCH_OFFSET_CNTL  |
531
               RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
532
               RADEON_GMC_BRUSH_NONE             |
533
               RADEON_GMC_DST_32BPP              |
534
               RADEON_GMC_SRC_DATATYPE_COLOR     |
535
               RADEON_DP_SRC_SOURCE_MEMORY       |
536
               R5XX_GMC_WR_MSK_DIS               |
537
               R5XX_ROP3_S
538
              );
539
868 serge 540
 
876 serge 541
868 serge 542
 
876 serge 543
        OUTREG(R5XX_CLR_CMP_MASK, R5XX_CLR_CMP_MSK);
544
        OUTREG(R5XX_CLR_CMP_CNTL, R5XX_SRC_CMP_EQ_COLOR | R5XX_CLR_CMP_SRC_SOURCE);
545
868 serge 546
 
876 serge 547
        OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset);
548
868 serge 549
 
876 serge 550
        OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x);
551
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w);
552
868 serge 553
 
554
555
 
876 serge 556
          OUT_RING(CP_PACKET3(RADEON_CNTL_TRANBLT, 8));
557
829 serge 558
 
876 serge 559
                   RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
560
                   RADEON_GMC_BRUSH_NONE             |
561
                   RADEON_GMC_DST_32BPP              |
562
                   RADEON_GMC_SRC_DATATYPE_COLOR     |
563
                   RADEON_DP_SRC_SOURCE_MEMORY       |
564
                   R5XX_GMC_WR_MSK_DIS               |
565
                   R5XX_ROP3_S
566
                  );
567
829 serge 568
 
876 serge 569
          OUT_RING(dstpixmap->pitch_offset);
570
829 serge 571
 
876 serge 572
          OUT_RING(0xFF000000);
573
          OUT_RING(0xFF000000);
574
829 serge 575
 
876 serge 576
          OUT_RING((blit->dst_x<<16)|blit->dst_y);
577
          OUT_RING((blit->w<<16)|blit->h);
578
868 serge 579
 
876 serge 580
829 serge 581
 
868 serge 582
583
 
876 serge 584
     };
585
     return ERR_OK;
586
}
829 serge 587
>
588