Subversion Repositories Kolibri OS

Rev

Rev 878 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 878 Rev 879
Line -... Line 1...
-
 
1
int ClearPixmap(io_clear_t *io)
-
 
2
{
-
 
3
     u32_t ifl;
-
 
4
     u32_t *ring, write;
-
 
5
 
-
 
6
     local_pixmap_t *dstpixmap;
-
 
7
 
-
 
8
     dstpixmap = (io->dstpix == (void*)-1) ? &scr_pixmap : io->dstpix ;
-
 
9
 
-
 
10
     ifl = safe_cli();
-
 
11
 
-
 
12
#if R300_PIO
-
 
13
 
-
 
14
     R5xxFIFOWait(6);
-
 
15
 
-
 
16
     OUTREG(R5XX_DP_GUI_MASTER_CNTL,
-
 
17
            RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
-
 
18
            RADEON_GMC_BRUSH_SOLID_COLOR      |
-
 
19
            RADEON_GMC_DST_32BPP              |
-
 
20
            RADEON_GMC_SRC_DATATYPE_COLOR     |
-
 
21
            R5XX_GMC_CLR_CMP_CNTL_DIS         |
-
 
22
            R5XX_GMC_WR_MSK_DIS               |
-
 
23
            R5XX_ROP3_P
-
 
24
           );
-
 
25
 
-
 
26
     OUTREG(R5XX_DP_BRUSH_FRGD_CLR, io->color);
-
 
27
     OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM);
-
 
28
     OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset);
-
 
29
     OUTREG(R5XX_DST_Y_X, 0);
-
 
30
     OUTREG(R5XX_DST_WIDTH_HEIGHT,(dstpixmap->width<<16)|dstpixmap->height);
-
 
31
 
-
 
32
#else
-
 
33
      BEGIN_RING();
-
 
34
        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_MULTI, 4));
-
 
35
 
-
 
36
        OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
-
 
37
                 RADEON_GMC_BRUSH_SOLID_COLOR      |
-
 
38
                 RADEON_GMC_DST_32BPP              |
-
 
39
                 RADEON_GMC_SRC_DATATYPE_COLOR     |
-
 
40
                 R5XX_GMC_CLR_CMP_CNTL_DIS         |
-
 
41
                 R5XX_GMC_WR_MSK_DIS               |
-
 
42
                 R5XX_ROP3_P
-
 
43
                );
-
 
44
 
-
 
45
        OUT_RING(dstpixmap->pitch_offset);
-
 
46
        OUT_RING(io->color);
-
 
47
        OUT_RING( 0 );
-
 
48
        OUT_RING((dstpixmap->width<<16)|dstpixmap->height);
-
 
49
      COMMIT_RING();
-
 
50
 
-
 
51
#endif
-
 
52
 
-
 
53
     safe_sti(ifl);
-
 
54
 
-
 
55
     return ERR_OK;
-
 
56
}
-
 
57
 
-
 
58
 
-
 
59
int Line(io_draw_t *draw)
1
int Line(draw_t *draw)
60
{
2
{
61
     local_pixmap_t *dstpixmap;
3
     local_pixmap_t *dstpixmap;
62
     clip_t clip;
4
     clip_t clip;
63
     int x0, y0, x1, y1;
5
     int x0, y0, x1, y1;
64
 
Line 28... Line 87...
28
 
87
        R5xxFIFOWait(6);
Line 29... Line 88...
29
        R5xxFIFOWait(6);
88
 
Line 30... Line 89...
30
 
89
        OUTREG(R5XX_DP_GUI_MASTER_CNTL,
31
        OUTREG(R5XX_DP_GUI_MASTER_CNTL,
90
               RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
32
               rhd.gui_control             |
91
               RADEON_GMC_BRUSH_SOLID_COLOR      |
-
 
92
               RADEON_GMC_DST_32BPP              |
33
               R5XX_GMC_BRUSH_SOLID_COLOR  |
93
               RADEON_GMC_SRC_DATATYPE_COLOR     |
34
               R5XX_GMC_SRC_DATATYPE_COLOR |
94
               R5XX_GMC_CLR_CMP_CNTL_DIS         |
35
               R5XX_GMC_CLR_CMP_CNTL_DIS   |
95
               R5XX_GMC_WR_MSK_DIS               |
36
               R5XX_GMC_WR_MSK_DIS         |
96
               R5XX_ROP3_P
37
               R5XX_ROP3_P
97
              );
Line 66... Line 126...
66
     };
126
     return ERR_OK;
67
     return ERR_OK;
127
}
68
}
128
 
69
 
129
int DrawRect(io_draw_t* draw)
Line 70... Line 130...
70
int DrawRect(draw_t* draw)
130
{
71
{
131
     int x0, y0, x1, y1, xend, yend;
72
     int x0, y0, x1, y1, xend, yend;
132
 
Line 73... Line 133...
73
 
133
     local_pixmap_t *dstpixmap;
74
     local_pixmap_t *dstpixmap;
134
     clip_t dst_clip;
Line 106... Line 166...
106
 
166
        R5xxFIFOWait(6);
Line 107... Line 167...
107
        R5xxFIFOWait(6);
167
 
Line 108... Line 168...
108
 
168
        OUTREG(R5XX_DP_GUI_MASTER_CNTL,
109
        OUTREG(R5XX_DP_GUI_MASTER_CNTL,
169
               RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
110
               rhd.gui_control              |
170
               RADEON_GMC_BRUSH_SOLID_COLOR      |
111
               R5XX_ROP3_P                  |
171
               RADEON_GMC_DST_32BPP              |
112
               R5XX_GMC_BRUSH_SOLID_COLOR   |
172
               RADEON_GMC_SRC_DATATYPE_COLOR     |
113
               R5XX_GMC_SRC_DATATYPE_COLOR  |
173
               R5XX_GMC_CLR_CMP_CNTL_DIS         |
114
               R5XX_GMC_CLR_CMP_CNTL_DIS    |
174
               R5XX_GMC_WR_MSK_DIS               |
-
 
175
               R5XX_ROP3_P
115
               R5XX_GMC_WR_MSK_DIS
176
              );
Line 116... Line 177...
116
              );
177
 
117
 
178
        OUTREG(R5XX_DP_BRUSH_FRGD_CLR, draw->color);
118
        OUTREG(R5XX_DP_BRUSH_FRGD_CLR, draw->color);
179
        OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM);
Line 180... Line 241...
180
     };
241
     return ERR_OK;
181
     return ERR_OK;
242
}
182
}
243
 
183
 
244
int FillRect(io_fill_t *fill)
Line 184... Line 245...
184
int FillRect(fill_t *fill)
245
{
185
{
246
     local_pixmap_t *dstpixmap;
186
     local_pixmap_t *dstpixmap;
247
     clip_t dst_clip;
187
     clip_t dst_clip;
248
     int x0, y0, x1, y1, xend, yend;
188
     int x0, y0, x1, y1;
249
 
Line 189... Line 250...
189
 
250
     dstpixmap = (fill->dstpix == (void*)-1) ? &scr_pixmap : fill->dstpix ;
Line 190... Line 251...
190
     dstpixmap = (fill->dstpix == (void*)-1) ? &scr_pixmap : fill->dstpix ;
251
 
191
 
252
     x0 = fill->x;
Line 192... Line 253...
192
     x0 = fill->x;
253
     y0 = fill->y;
193
     y0 = fill->y;
254
 
Line 194... Line 255...
194
 
255
     xend = x1 = x0 + fill->w - 1;
195
     x1 = x0+fill->w-1;
256
     yend = y1 = y0 + fill->h - 1;
196
     y1 = y0+fill->h-1;
257
 
197
 
258
     dst_clip.xmin = 0;
Line 235... Line 296...
235
        OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset);
296
 
236
 
297
        OUTREG(R5XX_DST_Y_X,(y0<<16)|x0);
Line 237... Line 298...
237
        OUTREG(R5XX_DST_Y_X,(y0<<16)|x0);
298
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(h<<16)|w);
238
        OUTREG(R5XX_DST_HEIGHT_WIDTH,(h<<16)|w);
299
 
-
 
300
        if( (fill->border & 0xFF000000) != 0)
-
 
301
        {
239
#else
302
           R5xxFIFOWait(2);
240
      BEGIN_RING();
303
 
-
 
304
           OUTREG(R5XX_DP_GUI_MASTER_CNTL,
241
        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7));
305
                  RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
242
        OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL    |
306
                  RADEON_GMC_BRUSH_SOLID_COLOR      |
243
                 R5XX_GMC_BRUSH_8X8_MONO_FG_BG       |
307
                  RADEON_GMC_DST_32BPP              |
244
                 RADEON_GMC_DST_32BPP                |
308
                  RADEON_GMC_SRC_DATATYPE_COLOR     |
245
                 RADEON_GMC_SRC_DATATYPE_COLOR       |
309
                  R5XX_GMC_CLR_CMP_CNTL_DIS         |
246
                 R5XX_GMC_CLR_CMP_CNTL_DIS           |
310
                  R5XX_GMC_WR_MSK_DIS               |
247
                 R5XX_GMC_WR_MSK_DIS                 |
311
                  R5XX_ROP3_P
248
                 R5XX_ROP3_P
312
                 );
249
                );
313
 
Line 250... Line -...
250
 
-
 
251
        OUT_RING(dstpixmap->pitch_offset);
314
           OUTREG(R5XX_DP_BRUSH_FRGD_CLR, fill->border);
252
        OUT_RING(fill->bkcolor);
-
 
253
        OUT_RING(fill->fcolor);
-
 
254
 
-
 
255
        OUT_RING(fill->bmp0);
-
 
256
        OUT_RING(fill->bmp1);
-
 
257
 
-
 
258
        OUT_RING((y0<<16)|x0);
-
 
259
        OUT_RING((y1<<16)|x1);
-
 
260
      COMMIT_RING();
-
 
261
 
-
 
262
#endif
-
 
263
        safe_sti(ifl);
-
 
264
     };
-
 
265
     return ERR_OK;
-
 
Line 266... Line -...
266
};
-
 
267
 
315
 
268
#if 0
316
           if( y0 == fill->y)
269
int Blit(blit_t *blit)
317
           {
270
{
-
 
271
  int x0, y0, x1, y1;
-
 
272
 
-
 
273
  x0 = blit->src_x;
-
 
274
  y0 = blit->src_y;
-
 
275
 
-
 
276
  x1 = x0+blit->w-1;
-
 
Line 277... Line 318...
277
  y1 = y0+blit->h-1;
318
              R5xxFIFOWait(2);
-
 
319
 
-
 
320
              OUTREG(R5XX_DST_Y_X,(y0<<16)|x0);
-
 
321
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|1);
-
 
322
              y0++;
-
 
323
              h--;
278
 
324
           }
279
 
325
           if( y1 == yend )
280
  if( ! BlockClip(&clip, &x0, &y0, &x1, &y1))
-
 
281
  {
-
 
Line -... Line 326...
-
 
326
           {
-
 
327
              R5xxFIFOWait(2);
282
     u32 *ring, write;
328
 
-
 
329
              OUTREG(R5XX_DST_Y_X,(y1<<16)|x0);
-
 
330
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|1);
283
     int w, h;
331
              h--;
-
 
332
           }
Line -... Line 333...
-
 
333
           if( x0 == fill->x)
-
 
334
           {
-
 
335
              R5xxFIFOWait(2);
-
 
336
 
-
 
337
              OUTREG(R5XX_DST_Y_X,(y0<<16)|x0);
284
     u32 ifl;
338
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(1<<16)|h);
Line -... Line 339...
-
 
339
           }
-
 
340
           if( x1 == xend)
285
 
341
           {
-
 
342
              R5xxFIFOWait(2);
Line 286... Line 343...
286
     w = x1-x0+1;
343
 
287
     h = y1-y0+1;
-
 
288
 
344
              OUTREG(R5XX_DST_Y_X,(y0<<16)|x1);
289
     ifl = safe_cli();
345
              OUTREG(R5XX_DST_WIDTH_HEIGHT,(1<<16)|h);
290
 
-
 
291
#if R300_PIO
346
           }
292
 
-
 
293
 
347
        };
294
#else
348
 
295
 
349
 
-
 
350
#else
296
     BEGIN_RING();
351
      BEGIN_RING();
297
       OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5));
352
        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7));
-
 
353
        OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL    |
Line 298... Line 354...
298
 
354
                 R5XX_GMC_BRUSH_8X8_MONO_FG_BG       |
299
       OUT_RING(RADEON_GMC_SRC_PITCH_OFFSET_CNTL  |
355
                 RADEON_GMC_DST_32BPP                |
-
 
356
                 RADEON_GMC_SRC_DATATYPE_COLOR       |
Line 300... Line 357...
300
                RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
357
                 R5XX_GMC_CLR_CMP_CNTL_DIS           |
-
 
358
                 R5XX_GMC_WR_MSK_DIS                 |
-
 
359
                 R5XX_ROP3_P
301
                RADEON_GMC_BRUSH_NONE             |
360
                );
302
                RADEON_GMC_DST_32BPP              |
361
 
303
                RADEON_GMC_SRC_DATATYPE_COLOR     |
362
        OUT_RING(dstpixmap->pitch_offset);
Line 304... Line 363...
304
                RADEON_DP_SRC_SOURCE_MEMORY       |
363
        OUT_RING(fill->bkcolor);
305
                (1 << 28)+(1 << 30) | R5XX_ROP3_S);
-
 
306
 
364
        OUT_RING(fill->fcolor);
307
       OUT_RING(rhd.dst_pitch_offset);
365
 
308
       OUT_RING(rhd.dst_pitch_offset);
366
        OUT_RING(fill->bmp0);
309
 
-
 
310
       OUT_RING((x0<<16)|y0);
-
 
311
       OUT_RING((blit->dst_x<<16)|blit->dst_y);
-
 
312
       OUT_RING((w<<16)|h);
-
 
313
     COMMIT_RING();
-
 
314
 
-
 
315
#endif
-
 
316
 
-
 
317
     safe_sti(ifl);
-
 
318
  } ;
-
 
319
  return ERR_OK;
-
 
320
}
-
 
321
 
-
 
322
#endif
-
 
323
 
-
 
324
 
-
 
325
#if 0
-
 
326
 
-
 
327
int LockPixmap(userpixmap_t *io)
-
 
328
{
-
 
329
   pixmap_t *pixmap;
-
 
330
   size_t    size;
-
 
331
   void     *usermap;
-
 
332
 
-
 
333
   dbgprintf("Lock pixmap %x\n", io->pixmap);
-
 
334
 
-
 
335
   if(io->pixmap == (pixmap_t*)-1)
-
 
336
     return ERR_PARAM;
-
 
337
   else
-
 
338
     pixmap = io->pixmap;
-
 
339
 
-
 
340
   if( (pixmap->flags & 1) == PX_LOCK )
-
 
341
     return ERR_PARAM;
-
 
342
 
-
 
343
   size = (pixmap->pitch*pixmap->width+4095) & ~ 4095;
-
 
344
   if (usermap = UserAlloc(size))
-
 
345
   {
-
 
346
     CommitPages(usermap, ((u32_t)pixmap->raw+rhd.PhisBase)|7|(1<<9), size);
367
        OUT_RING(fill->bmp1);
Line 347... Line -...
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
 
-
 
Line 353... Line -...
353
     return ERR_OK;
-
 
354
   }
-
 
355
   else
-
 
356
     return ERR_PARAM;
-
 
357
};
-
 
358
 
-
 
359
int UnlockPixmap(userpixmap_t *io)
-
 
360
{
-
 
361
  pixmap_t *pixmap;
-
 
362
  size_t    size;
-
 
363
 
-
 
364
  dbgprintf("Unlock pixmap %x\n", io->pixmap);
-
 
365
 
-
 
366
  if(io->pixmap == (pixmap_t*)-1)
-
 
367
    return ERR_PARAM;
-
 
368
  else
-
 
369
    pixmap = io->pixmap;
-
 
370
 
-
 
371
  if( (pixmap->flags & 1) != PX_LOCK )
-
 
372
    return ERR_PARAM;
-
 
373
 
-
 
374
/*   Sanity checks  */
-
 
375
 
-
 
376
  if( (pixmap->usermap == 0)||
-
 
377
      ((u32_t)pixmap->usermap >= 0x80000000) ||
-
 
378
      ((u32_t)pixmap->usermap & 4095)
-
 
379
    )
-
 
Line 380... Line -...
380
    return ERR_PARAM;
-
 
381
 
-
 
382
  size = (pixmap->pitch*pixmap->width+4095) & ~ 4095;
368
 
383
 
369
        OUT_RING((y0<<16)|x0);
384
  UnmapPages(pixmap->usermap, size);
370
        OUT_RING((y1<<16)|x1);
Line 385... Line 371...
385
  UserFree(pixmap->usermap);
371
      COMMIT_RING();
386
  pixmap->usermap =  NULL;
372
 
Line 485... Line 471...
485
     return ERR_OK;
471
};
486
};
472
 
487
 
473
 
Line 488... Line 474...
488
 
474
int BlitTransparent(io_blit_t *blit)
489
int TransBlit(pixblit_t *blit)
475
{
490
{
476
     clip_t src_clip, dst_clip;
Line 491... Line 477...
491
     clip_t src_clip, dst_clip;
477
 
492
 
478
     local_pixmap_t *srcpixmap;
Line 584... Line 570...
584
     };
570
     return ERR_OK;
585
     return ERR_OK;
571
}
586
}
572
 
587
>
573
 
Line -... Line 574...
-
 
574
#if 0
-
 
575
 
-
 
576
int LockPixmap(userpixmap_t *io)
-
 
577
{
-
 
578
   pixmap_t *pixmap;
-
 
579
   size_t    size;
-
 
580
   void     *usermap;
-
 
581
 
-
 
582
   dbgprintf("Lock pixmap %x\n", io->pixmap);
-
 
583
 
-
 
584
   if(io->pixmap == (pixmap_t*)-1)
-
 
585
     return ERR_PARAM;
-
 
586
   else
-
 
587
     pixmap = io->pixmap;
-
 
588
 
-
 
589
   if( (pixmap->flags & 1) == PX_LOCK )
-
 
590
     return ERR_PARAM;
-
 
591
 
-
 
592
   size = (pixmap->pitch*pixmap->width+4095) & ~ 4095;
-
 
593
   if (usermap = UserAlloc(size))
-
 
594
   {
-
 
595
     CommitPages(usermap, ((u32_t)pixmap->raw+rhd.PhisBase)|7|(1<<9), size);
-
 
596
     pixmap->flags |= PX_LOCK;
-
 
597
     pixmap->usermap = usermap;
-
 
598
     io->usermap = usermap;
-
 
599
     io->pitch   = pixmap->pitch;
-
 
600
     dbgprintf("map at %x\n", io->usermap);
-
 
601
 
-
 
602
     return ERR_OK;
-
 
603
   }
-
 
604
   else
-
 
605
     return ERR_PARAM;
-
 
606
};
-
 
607
 
-
 
608
int UnlockPixmap(userpixmap_t *io)
-
 
609
{
-
 
610
  pixmap_t *pixmap;
-
 
611
  size_t    size;
-
 
612
 
-
 
613
  dbgprintf("Unlock pixmap %x\n", io->pixmap);
-
 
614
 
-
 
615
  if(io->pixmap == (pixmap_t*)-1)
-
 
616
    return ERR_PARAM;
-
 
617
  else
-
 
618
    pixmap = io->pixmap;
-
 
619
 
-
 
620
  if( (pixmap->flags & 1) != PX_LOCK )
-
 
621
    return ERR_PARAM;
-
 
622
 
-
 
623
/*   Sanity checks  */
-
 
624
 
-
 
625
  if( (pixmap->usermap == 0)||
-
 
626
      ((u32_t)pixmap->usermap >= 0x80000000) ||
-
 
627
      ((u32_t)pixmap->usermap & 4095)
-
 
628
    )
-
 
629
    return ERR_PARAM;
-
 
630
 
-
 
631
  size = (pixmap->pitch*pixmap->width+4095) & ~ 4095;
-
 
632
 
-
 
633
  UnmapPages(pixmap->usermap, size);
-
 
634
  UserFree(pixmap->usermap);
-
 
635
  pixmap->usermap =  NULL;
-
 
636
  pixmap->flags  &= ~PX_LOCK;
-
 
637
  io->usermap     =  NULL;
-
 
638
  io->pitch       =  0;
-
 
639
 
-
 
640
  return ERR_OK;
-
 
641
};
-
 
642
 
-
 
643
#endif
-
 
644
>