Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. #define BRUSH_MONO   (0<<4)
  3.  
  4. int DrawRect(draw_t* draw)
  5. {
  6.   int x0, y0, x1, y1;
  7.  
  8.   x0 = draw->x;
  9.   y0 = draw->y;
  10.  
  11.   x1 = x0+draw->w-1;
  12.   y1 = y0+draw->h-1;
  13.  
  14. //  dbgprintf("draw rect x0:%d, y0:%d, x1:%d, y1:%d, color: %x\n",
  15. //             x0, y0, x1, y1, draw->color);
  16.  
  17.   if( ! BlockClip( &x0, &y0, &x1, &y1))
  18.   {
  19.      u32 *ring, write;
  20.      int w, h;
  21.      u32 ifl;
  22.  
  23.      w = x1-x0+1;
  24.      h = y1-y0+1;
  25.  
  26.      ifl = safe_cli();
  27.  
  28.      BEGIN_RING();
  29.        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_MULTI, 4));
  30.  
  31.  
  32.        OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
  33.                 RADEON_GMC_BRUSH_SOLID_COLOR      |
  34.                 RADEON_GMC_DST_32BPP              |
  35.                 RADEON_GMC_SRC_DATATYPE_COLOR     |
  36.                 (1 << 28)+(1 << 30) | R5XX_ROP3_P);
  37.  
  38.        OUT_RING(rhd.dst_pitch_offset);
  39.        OUT_RING(draw->color);
  40.        OUT_RING((y0<<16)|x0);
  41.        OUT_RING((w<<16)|h);
  42.      COMMIT_RING();
  43.  
  44. /*
  45. #if 1
  46.  
  47. #else
  48.  
  49.      R5xxFIFOWait(7);
  50.  
  51.      OUTREG(R5XX_DP_GUI_MASTER_CNTL, rhd.gui_control | R5XX_ROP3_P |
  52.                                      R5XX_GMC_BRUSH_SOLID_COLOR |
  53.                                      R5XX_GMC_SRC_DATATYPE_COLOR);
  54.  
  55.      OUTREG(R5XX_DP_BRUSH_FRGD_CLR, draw->color);
  56.      OUTREG(R5XX_DP_WRITE_MASK, 0xFFFFFFFF);
  57.      OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM);
  58.      OUTREG(R5XX_DST_PITCH_OFFSET, rhd.dst_pitch_offset);
  59.      OUTREG(R5XX_DST_Y_X,(y0<<16)|x0);
  60.      OUTREG( R5XX_DST_WIDTH_HEIGHT,(w<<16)|h);
  61. #endif
  62. */
  63.      safe_sti(ifl);
  64.   } ;
  65.   return 0;
  66. }
  67.  
  68. int FillRect(fill_t *fill)
  69. {
  70.   int x0, y0, x1, y1;
  71.  
  72.   x0 = fill->x;
  73.   y0 = fill->y;
  74.  
  75.   x1 = x0+fill->w-1;
  76.   y1 = y0+fill->h-1;
  77.  
  78. //  dbgprintf("fill rect x0:%d, y0:%d, x1:%d, y1:%d\n",
  79. //             x0, y0, x1, y1);
  80.  
  81.   if( ! BlockClip( &x0, &y0, &x1, &y1))
  82.   {
  83.      u32 *ring, write;
  84.      u32 ifl;
  85.  
  86.      ifl = safe_cli();
  87.  
  88.      BEGIN_RING();
  89.        OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7));
  90.        OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL    |
  91.                 BRUSH_MONO                          |
  92.                 RADEON_GMC_DST_32BPP                |
  93.                 RADEON_GMC_SRC_DATATYPE_COLOR       |
  94.                 (1 << 28)+(1 << 30) | R5XX_ROP3_P);
  95.  
  96.          OUT_RING(rhd.dst_pitch_offset);
  97.          OUT_RING(fill->bkcolor);
  98.          OUT_RING(fill->fcolor);
  99.  
  100.          OUT_RING(fill->bmp0);
  101.          OUT_RING(fill->bmp1);
  102.  
  103.        //  OUT_RING(0xCCCC3333);
  104.        //  OUT_RING(0xCCCC3333);
  105.        //  OUT_RING(~0x11884422);
  106.        //  OUT_RING(~0x11884422);
  107.  
  108. //         OUT_RING(0x88112244);
  109. //         OUT_RING(0x88112244);
  110.  
  111.          OUT_RING((y0<<16)|x0);
  112.          OUT_RING((y1<<16)|x1);
  113.      COMMIT_RING();
  114.  
  115.      safe_sti(ifl);
  116.   };
  117.   return 0;
  118. }
  119.  
  120.  
  121.  
  122. int Line2P(line2p_t *draw)
  123. {
  124.  
  125.   int x0, y0, x1, y1;
  126.  
  127.   x0 = draw->x0;
  128.   y0 = draw->y0;
  129.  
  130.   x1 = draw->x1;
  131.   y1 = draw->y1;
  132.  
  133.   if ( !LineClip( &x0, &y0, &x1, &y1 ))
  134.   {
  135.     u32 ifl;
  136.     u32 *ring, write;
  137.  
  138.     ifl = safe_cli();
  139.  
  140.      BEGIN_RING();
  141.          OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_POLYLINE, 4));
  142.          OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL  |
  143.                   RADEON_GMC_BRUSH_SOLID_COLOR      |
  144.                   RADEON_GMC_DST_32BPP              |
  145.                   RADEON_GMC_SRC_DATATYPE_COLOR     |
  146.                   (1 << 28)+(1 << 30) | R5XX_ROP3_P);
  147.  
  148.          OUT_RING(rhd.dst_pitch_offset);
  149.          OUT_RING(draw->color);
  150.          OUT_RING((y0<<16)|x0);
  151.          OUT_RING((y1<<16)|x1);
  152.      COMMIT_RING();
  153.  
  154.  
  155. /*
  156.      R5xxFIFOWait(7);
  157.  
  158.      OUTREG(R5XX_DP_GUI_MASTER_CNTL, rhd.gui_control | R5XX_ROP3_P |
  159.                                      R5XX_GMC_BRUSH_SOLID_COLOR |
  160.                                      R5XX_GMC_SRC_DATATYPE_COLOR);
  161.  
  162.      OUTREG(R5XX_DST_LINE_PATCOUNT, 0x55 << R5XX_BRES_CNTL_SHIFT);
  163.  
  164.      OUTREG(R5XX_DP_BRUSH_FRGD_CLR, draw->color);
  165.      OUTREG(R5XX_DP_WRITE_MASK, 0xFFFFFFFF);
  166.      OUTREG(R5XX_DST_PITCH_OFFSET, rhd.dst_pitch_offset);
  167.  
  168.      OUTREG(R5XX_DST_LINE_START,(y0<<16)|x0);
  169.      OUTREG(R5XX_DST_LINE_END,(y1<<16)|x1);
  170. */
  171.      safe_sti(ifl);
  172.  
  173.   };
  174.   return 0;
  175. }
  176.