Subversion Repositories Kolibri OS

Rev

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

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