Subversion Repositories Kolibri OS

Rev

Rev 876 | 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;
876 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
 
876 serge 83
     y1 = 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
 
876 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,(draw->y0<<16)|draw->x0);
122
        OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|h);
123
#else
812 serge 124
      BEGIN_RING();
876 serge 125
        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_MULTI, 4));
126
812 serge 127
 
876 serge 128
                 RADEON_GMC_BRUSH_SOLID_COLOR      |
129
                 RADEON_GMC_DST_32BPP              |
130
                 RADEON_GMC_SRC_DATATYPE_COLOR     |
131
                 R5XX_GMC_CLR_CMP_CNTL_DIS         |
132
                 R5XX_GMC_WR_MSK_DIS               |
133
                 R5XX_ROP3_P
134
                );
135
808 serge 136
 
876 serge 137
        OUT_RING(draw->color);
138
        OUT_RING((draw->x0<<16)|y0);
139
        OUT_RING((w<<16)|h);
140
      COMMIT_RING();
141
#endif
812 serge 142
        safe_sti(ifl);
876 serge 143
     };
144
     return ERR_OK;
145
}
808 serge 146
147
 
148
{
149
     local_pixmap_t *dstpixmap;
876 serge 150
     clip_t dst_clip;
151
     int x0, y0, x1, y1;
152
808 serge 153
 
876 serge 154
817 serge 155
 
876 serge 156
     y0 = fill->y;
157
808 serge 158
 
876 serge 159
     y1 = y0+fill->h-1;
160
808 serge 161
 
876 serge 162
     dst_clip.ymin = 0;
163
     dst_clip.xmax = dstpixmap->width-1;
164
     dst_clip.ymax = dstpixmap->height-1;
165
166
 
808 serge 167
//             x0, y0, x1, y1);
168
169
 
876 serge 170
     {
171
        u32_t *ring, write;
172
        u32_t ifl = safe_cli();
173
808 serge 174
 
813 serge 175
812 serge 176
 
876 serge 177
        int h = y1-y0+1;
178
179
 
180
181
 
182
               RADEON_GMC_DST_PITCH_OFFSET_CNTL |
183
               R5XX_GMC_BRUSH_8X8_MONO_FG_BG    |
184
               RADEON_GMC_DST_32BPP             |
185
               R5XX_GMC_SRC_DATATYPE_COLOR      |
186
               R5XX_GMC_CLR_CMP_CNTL_DIS        |
187
               R5XX_GMC_WR_MSK_DIS              |
188
               R5XX_ROP3_P
189
               );
190
191
 
192
        OUTREG(R5XX_DP_BRUSH_FRGD_CLR, fill->fcolor);
193
194
 
195
        OUTREG(R5XX_BRUSH_DATA1, fill->bmp1);
196
197
 
198
        OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset);
199
200
 
201
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(h<<16)|w);
202
#else
812 serge 203
      BEGIN_RING();
876 serge 204
        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7));
205
        OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL    |
206
                 R5XX_GMC_BRUSH_8X8_MONO_FG_BG       |
207
                 RADEON_GMC_DST_32BPP                |
208
                 RADEON_GMC_SRC_DATATYPE_COLOR       |
209
                 R5XX_GMC_CLR_CMP_CNTL_DIS           |
210
                 R5XX_GMC_WR_MSK_DIS                 |
211
                 R5XX_ROP3_P
212
                );
213
812 serge 214
 
876 serge 215
        OUT_RING(fill->bkcolor);
216
        OUT_RING(fill->fcolor);
217
808 serge 218
 
876 serge 219
        OUT_RING(fill->bmp1);
220
808 serge 221
 
876 serge 222
        OUT_RING((y1<<16)|x1);
223
      COMMIT_RING();
224
808 serge 225
 
812 serge 226
        safe_sti(ifl);
876 serge 227
     };
228
     return ERR_OK;
229
};
230
812 serge 231
 
876 serge 232
int Blit(blit_t *blit)
810 serge 233
{
234
  int x0, y0, x1, y1;
235
808 serge 236
 
810 serge 237
  y0 = blit->src_y;
238
808 serge 239
 
810 serge 240
  y1 = y0+blit->h-1;
241
242
 
243
 
876 serge 244
  {
810 serge 245
     u32 *ring, write;
246
     int w, h;
247
     u32 ifl;
248
249
 
250
     h = y1-y0+1;
251
252
 
253
254
 
813 serge 255
812 serge 256
 
257
 
258
259
 
810 serge 260
       OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5));
261
262
 
263
                RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
264
                RADEON_GMC_BRUSH_NONE             |
265
                RADEON_GMC_DST_32BPP              |
266
                RADEON_GMC_SRC_DATATYPE_COLOR     |
267
                RADEON_DP_SRC_SOURCE_MEMORY       |
268
                (1 << 28)+(1 << 30) | R5XX_ROP3_S);
269
270
 
271
       OUT_RING(rhd.dst_pitch_offset);
272
273
 
274
       OUT_RING((blit->dst_x<<16)|blit->dst_y);
275
       OUT_RING((w<<16)|h);
276
     COMMIT_RING();
277
278
 
812 serge 279
280
 
810 serge 281
  } ;
282
  return ERR_OK;
817 serge 283
}
810 serge 284
285
 
813 serge 286
808 serge 287
 
815 serge 288
 
876 serge 289
290
 
817 serge 291
{
292
   pixmap_t *pixmap;
829 serge 293
   size_t    size;
294
   void     *usermap;
295
815 serge 296
 
829 serge 297
815 serge 298
 
829 serge 299
     return ERR_PARAM;
300
   else
301
     pixmap = io->pixmap;
302
817 serge 303
 
829 serge 304
     return ERR_PARAM;
305
817 serge 306
 
829 serge 307
   if (usermap = UserAlloc(size))
308
   {
309
     CommitPages(usermap, ((u32_t)pixmap->raw+rhd.PhisBase)|7|(1<<9), size);
310
     pixmap->flags |= PX_LOCK;
311
     pixmap->usermap = usermap;
312
     io->usermap = usermap;
313
     io->pitch   = pixmap->pitch;
314
     dbgprintf("map at %x\n", io->usermap);
315
817 serge 316
 
829 serge 317
   }
318
   else
319
     return ERR_PARAM;
320
};
817 serge 321
322
 
818 serge 323
{
324
  pixmap_t *pixmap;
325
  size_t    size;
326
817 serge 327
 
818 serge 328
329
 
330
    return ERR_PARAM;
331
  else
332
    pixmap = io->pixmap;
333
334
 
335
    return ERR_PARAM;
336
337
 
868 serge 338
339
 
340
      ((u32_t)pixmap->usermap >= 0x80000000) ||
341
      ((u32_t)pixmap->usermap & 4095)
342
    )
343
    return ERR_PARAM;
344
345
 
818 serge 346
347
 
348
  UserFree(pixmap->usermap);
349
  pixmap->usermap =  NULL;
350
  pixmap->flags  &= ~PX_LOCK;
351
  io->usermap     =  NULL;
352
  io->pitch       =  0;
353
354
 
355
};
356
357
 
876 serge 358
818 serge 359
 
815 serge 360
{
361
     clip_t src_clip, dst_clip;
876 serge 362
815 serge 363
 
876 serge 364
     local_pixmap_t *dstpixmap;
365
815 serge 366
 
817 serge 367
815 serge 368
 
369
     srcpixmap = (blit->srcpix == (void*)-1) ? &scr_pixmap : blit->srcpix ;
370
371
 
817 serge 372
815 serge 373
 
817 serge 374
     //dbgprintf("src.width: %d src.height: %d\n", srcpixmap->width,srcpixmap->height);
375
     //dbgprintf("srcpitch: %x dstpitch: %x\n",
376
     //           srcpixmap->pitch_offset,dstpixmap->pitch_offset);
377
815 serge 378
 
876 serge 379
     src_clip.ymin = 0;
380
     src_clip.xmax = srcpixmap->width-1;
381
     src_clip.ymax = srcpixmap->height-1;
382
815 serge 383
 
876 serge 384
     dst_clip.ymin = 0;
385
     dst_clip.xmax = dstpixmap->width-1;
386
     dst_clip.ymax = dstpixmap->height-1;
387
388
 
389
                    &src_clip, &blit->src_x, &blit->src_y,
390
                    &blit->w, &blit->h) )
391
     {
392
        u32_t *ring, write;
393
394
 
395
396
 
868 serge 397
815 serge 398
 
876 serge 399
868 serge 400
 
876 serge 401
               RADEON_GMC_SRC_PITCH_OFFSET_CNTL  |
402
               RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
403
               RADEON_GMC_BRUSH_NONE             |
404
               RADEON_GMC_DST_32BPP              |
405
               RADEON_GMC_SRC_DATATYPE_COLOR     |
406
               RADEON_DP_SRC_SOURCE_MEMORY       |
407
               R5XX_GMC_CLR_CMP_CNTL_DIS         |
408
               R5XX_GMC_WR_MSK_DIS               |
409
               R5XX_ROP3_S
410
              );
411
868 serge 412
 
876 serge 413
868 serge 414
 
876 serge 415
        OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset);
416
868 serge 417
 
876 serge 418
        OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x);
419
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w);
420
868 serge 421
 
422
423
 
876 serge 424
          OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5));
425
815 serge 426
 
876 serge 427
                   RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
428
                   RADEON_GMC_BRUSH_NONE             |
429
                   RADEON_GMC_DST_32BPP              |
430
                   RADEON_GMC_SRC_DATATYPE_COLOR     |
431
                   RADEON_DP_SRC_SOURCE_MEMORY       |
432
                   R5XX_GMC_CLR_CMP_CNTL_DIS         |
433
                   R5XX_GMC_WR_MSK_DIS               |
434
                   R5XX_ROP3_S
435
                  );
436
815 serge 437
 
876 serge 438
          OUT_RING(dstpixmap->pitch_offset);
439
815 serge 440
 
876 serge 441
          OUT_RING((blit->dst_x<<16)|blit->dst_y);
442
          OUT_RING((blit->w<<16)|blit->h);
443
        COMMIT_RING();
444
815 serge 445
 
868 serge 446
       safe_sti(ifl);
876 serge 447
     };
448
     return ERR_OK;
449
};
450
868 serge 451
 
829 serge 452
 
453
{
454
     clip_t src_clip, dst_clip;
876 serge 455
829 serge 456
 
876 serge 457
     local_pixmap_t *dstpixmap;
458
829 serge 459
 
868 serge 460
829 serge 461
 
462
     srcpixmap = (blit->srcpix == (void*)-1) ? &scr_pixmap : blit->srcpix ;
463
464
 
465
466
 
467
     //dbgprintf("src.width: %d src.height: %d\n", srcpixmap->width,srcpixmap->height);
468
     //dbgprintf("srcpitch: %x dstpitch: %x\n",
469
     //           srcpixmap->pitch_offset,dstpixmap->pitch_offset);
470
     src_clip.xmin = 0;
876 serge 471
     src_clip.ymin = 0;
472
     src_clip.xmax = srcpixmap->width-1;
473
     src_clip.ymax = srcpixmap->height-1;
474
829 serge 475
 
876 serge 476
     dst_clip.ymin = 0;
477
     dst_clip.xmax = dstpixmap->width-1;
478
     dst_clip.ymax = dstpixmap->height-1;
479
829 serge 480
 
876 serge 481
                    &src_clip, &blit->src_x, &blit->src_y,
482
                    &blit->w, &blit->h) )
483
     {
484
        u32_t *ring, write;
485
486
 
487
488
 
868 serge 489
490
 
876 serge 491
868 serge 492
 
876 serge 493
               RADEON_GMC_SRC_PITCH_OFFSET_CNTL  |
494
               RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
495
               RADEON_GMC_BRUSH_NONE             |
496
               RADEON_GMC_DST_32BPP              |
497
               RADEON_GMC_SRC_DATATYPE_COLOR     |
498
               RADEON_DP_SRC_SOURCE_MEMORY       |
499
               R5XX_GMC_WR_MSK_DIS               |
500
               R5XX_ROP3_S
501
              );
502
868 serge 503
 
876 serge 504
868 serge 505
 
876 serge 506
        OUTREG(R5XX_CLR_CMP_MASK, R5XX_CLR_CMP_MSK);
507
        OUTREG(R5XX_CLR_CMP_CNTL, R5XX_SRC_CMP_EQ_COLOR | R5XX_CLR_CMP_SRC_SOURCE);
508
868 serge 509
 
876 serge 510
        OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset);
511
868 serge 512
 
876 serge 513
        OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x);
514
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w);
515
868 serge 516
 
517
518
 
876 serge 519
          OUT_RING(CP_PACKET3(RADEON_CNTL_TRANBLT, 8));
520
829 serge 521
 
876 serge 522
                   RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
523
                   RADEON_GMC_BRUSH_NONE             |
524
                   RADEON_GMC_DST_32BPP              |
525
                   RADEON_GMC_SRC_DATATYPE_COLOR     |
526
                   RADEON_DP_SRC_SOURCE_MEMORY       |
527
                   R5XX_GMC_WR_MSK_DIS               |
528
                   R5XX_ROP3_S
529
                  );
530
829 serge 531
 
876 serge 532
          OUT_RING(dstpixmap->pitch_offset);
533
829 serge 534
 
876 serge 535
          OUT_RING(0xFF000000);
536
          OUT_RING(0xFF000000);
537
829 serge 538
 
876 serge 539
          OUT_RING((blit->dst_x<<16)|blit->dst_y);
540
          OUT_RING((blit->w<<16)|blit->h);
541
868 serge 542
 
876 serge 543
829 serge 544
 
868 serge 545
546
 
876 serge 547
     };
548
     return ERR_OK;
549
}
829 serge 550
>
551