Commit b30d4608dae994cf57cab4824f3307de026fd373

Authored by bellard
1 parent 81ca7991

24 bpp fixes


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@984 c046a42c-6fe2-441c-8c8c-71466251a162
hw/cirrus_vga.c
@@ -456,25 +456,6 @@ static const cirrus_bitblt_rop_t cirrus_colorexpand_transp[16][4] = { @@ -456,25 +456,6 @@ static const cirrus_bitblt_rop_t cirrus_colorexpand_transp[16][4] = {
456 ROP2(cirrus_colorexpand_transp_notsrc_and_notdst), 456 ROP2(cirrus_colorexpand_transp_notsrc_and_notdst),
457 }; 457 };
458 458
459 -static const cirrus_bitblt_rop_t cirrus_colorexpand_transp_inv[16][4] = {  
460 - ROP2(cirrus_colorexpand_transp_inv_0),  
461 - ROP2(cirrus_colorexpand_transp_inv_src_and_dst),  
462 - ROP_NOP2(cirrus_bitblt_rop_nop),  
463 - ROP2(cirrus_colorexpand_transp_inv_src_and_notdst),  
464 - ROP2(cirrus_colorexpand_transp_inv_notdst),  
465 - ROP2(cirrus_colorexpand_transp_inv_src),  
466 - ROP2(cirrus_colorexpand_transp_inv_1),  
467 - ROP2(cirrus_colorexpand_transp_inv_notsrc_and_dst),  
468 - ROP2(cirrus_colorexpand_transp_inv_src_xor_dst),  
469 - ROP2(cirrus_colorexpand_transp_inv_src_or_dst),  
470 - ROP2(cirrus_colorexpand_transp_inv_notsrc_or_notdst),  
471 - ROP2(cirrus_colorexpand_transp_inv_src_notxor_dst),  
472 - ROP2(cirrus_colorexpand_transp_inv_src_or_notdst),  
473 - ROP2(cirrus_colorexpand_transp_inv_notsrc),  
474 - ROP2(cirrus_colorexpand_transp_inv_notsrc_or_dst),  
475 - ROP2(cirrus_colorexpand_transp_inv_notsrc_and_notdst),  
476 -};  
477 -  
478 static const cirrus_bitblt_rop_t cirrus_colorexpand[16][4] = { 459 static const cirrus_bitblt_rop_t cirrus_colorexpand[16][4] = {
479 ROP2(cirrus_colorexpand_0), 460 ROP2(cirrus_colorexpand_0),
480 ROP2(cirrus_colorexpand_src_and_dst), 461 ROP2(cirrus_colorexpand_src_and_dst),
@@ -494,6 +475,44 @@ static const cirrus_bitblt_rop_t cirrus_colorexpand[16][4] = { @@ -494,6 +475,44 @@ static const cirrus_bitblt_rop_t cirrus_colorexpand[16][4] = {
494 ROP2(cirrus_colorexpand_notsrc_and_notdst), 475 ROP2(cirrus_colorexpand_notsrc_and_notdst),
495 }; 476 };
496 477
  478 +static const cirrus_bitblt_rop_t cirrus_colorexpand_pattern_transp[16][4] = {
  479 + ROP2(cirrus_colorexpand_pattern_transp_0),
  480 + ROP2(cirrus_colorexpand_pattern_transp_src_and_dst),
  481 + ROP_NOP2(cirrus_bitblt_rop_nop),
  482 + ROP2(cirrus_colorexpand_pattern_transp_src_and_notdst),
  483 + ROP2(cirrus_colorexpand_pattern_transp_notdst),
  484 + ROP2(cirrus_colorexpand_pattern_transp_src),
  485 + ROP2(cirrus_colorexpand_pattern_transp_1),
  486 + ROP2(cirrus_colorexpand_pattern_transp_notsrc_and_dst),
  487 + ROP2(cirrus_colorexpand_pattern_transp_src_xor_dst),
  488 + ROP2(cirrus_colorexpand_pattern_transp_src_or_dst),
  489 + ROP2(cirrus_colorexpand_pattern_transp_notsrc_or_notdst),
  490 + ROP2(cirrus_colorexpand_pattern_transp_src_notxor_dst),
  491 + ROP2(cirrus_colorexpand_pattern_transp_src_or_notdst),
  492 + ROP2(cirrus_colorexpand_pattern_transp_notsrc),
  493 + ROP2(cirrus_colorexpand_pattern_transp_notsrc_or_dst),
  494 + ROP2(cirrus_colorexpand_pattern_transp_notsrc_and_notdst),
  495 +};
  496 +
  497 +static const cirrus_bitblt_rop_t cirrus_colorexpand_pattern[16][4] = {
  498 + ROP2(cirrus_colorexpand_pattern_0),
  499 + ROP2(cirrus_colorexpand_pattern_src_and_dst),
  500 + ROP_NOP2(cirrus_bitblt_rop_nop),
  501 + ROP2(cirrus_colorexpand_pattern_src_and_notdst),
  502 + ROP2(cirrus_colorexpand_pattern_notdst),
  503 + ROP2(cirrus_colorexpand_pattern_src),
  504 + ROP2(cirrus_colorexpand_pattern_1),
  505 + ROP2(cirrus_colorexpand_pattern_notsrc_and_dst),
  506 + ROP2(cirrus_colorexpand_pattern_src_xor_dst),
  507 + ROP2(cirrus_colorexpand_pattern_src_or_dst),
  508 + ROP2(cirrus_colorexpand_pattern_notsrc_or_notdst),
  509 + ROP2(cirrus_colorexpand_pattern_src_notxor_dst),
  510 + ROP2(cirrus_colorexpand_pattern_src_or_notdst),
  511 + ROP2(cirrus_colorexpand_pattern_notsrc),
  512 + ROP2(cirrus_colorexpand_pattern_notsrc_or_dst),
  513 + ROP2(cirrus_colorexpand_pattern_notsrc_and_notdst),
  514 +};
  515 +
497 static const cirrus_fill_t cirrus_fill[16][4] = { 516 static const cirrus_fill_t cirrus_fill[16][4] = {
498 ROP2(cirrus_fill_0), 517 ROP2(cirrus_fill_0),
499 ROP2(cirrus_fill_src_and_dst), 518 ROP2(cirrus_fill_src_and_dst),
@@ -584,27 +603,8 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin, @@ -584,27 +603,8 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin,
584 static int cirrus_bitblt_common_patterncopy(CirrusVGAState * s, 603 static int cirrus_bitblt_common_patterncopy(CirrusVGAState * s,
585 const uint8_t * src) 604 const uint8_t * src)
586 { 605 {
587 - uint8_t work_colorexp[256];  
588 uint8_t *dst; 606 uint8_t *dst;
589 - int patternbytes = s->cirrus_blt_pixelwidth * 8;  
590 607
591 - if (s->cirrus_blt_mode & CIRRUS_BLTMODE_COLOREXPAND) {  
592 - cirrus_bitblt_rop_t rop_func;  
593 - cirrus_bitblt_fgcol(s);  
594 - cirrus_bitblt_bgcol(s);  
595 - rop_func = cirrus_colorexpand[CIRRUS_ROP_SRC_INDEX][s->cirrus_blt_pixelwidth - 1];  
596 - rop_func(s, work_colorexp, src, patternbytes, 1, patternbytes, 8);  
597 - src = work_colorexp;  
598 - s->cirrus_blt_mode &= ~CIRRUS_BLTMODE_COLOREXPAND;  
599 - }  
600 - if (s->cirrus_blt_mode & ~CIRRUS_BLTMODE_PATTERNCOPY) {  
601 -#ifdef DEBUG_BITBLT  
602 - printf("cirrus: blt mode %02x (pattercopy) - unimplemented\n",  
603 - s->cirrus_blt_mode);  
604 -#endif  
605 - return 0;  
606 - }  
607 -  
608 dst = s->vram_ptr + s->cirrus_blt_dstaddr; 608 dst = s->vram_ptr + s->cirrus_blt_dstaddr;
609 (*s->cirrus_rop) (s, dst, src, 609 (*s->cirrus_rop) (s, dst, src,
610 s->cirrus_blt_dstpitch, 0, 610 s->cirrus_blt_dstpitch, 0,
@@ -728,6 +728,7 @@ static int cirrus_bitblt_cputovideo(CirrusVGAState * s) @@ -728,6 +728,7 @@ static int cirrus_bitblt_cputovideo(CirrusVGAState * s)
728 if (s->cirrus_blt_mode & CIRRUS_BLTMODE_COLOREXPAND) { 728 if (s->cirrus_blt_mode & CIRRUS_BLTMODE_COLOREXPAND) {
729 s->cirrus_blt_srcpitch = 8; 729 s->cirrus_blt_srcpitch = 8;
730 } else { 730 } else {
  731 + /* XXX: check for 24 bpp */
731 s->cirrus_blt_srcpitch = 8 * 8 * s->cirrus_blt_pixelwidth; 732 s->cirrus_blt_srcpitch = 8 * 8 * s->cirrus_blt_pixelwidth;
732 } 733 }
733 s->cirrus_srccounter = s->cirrus_blt_srcpitch; 734 s->cirrus_srccounter = s->cirrus_blt_srcpitch;
@@ -848,20 +849,32 @@ static void cirrus_bitblt_start(CirrusVGAState * s) @@ -848,20 +849,32 @@ static void cirrus_bitblt_start(CirrusVGAState * s)
848 CIRRUS_BLTMODE_COLOREXPAND) { 849 CIRRUS_BLTMODE_COLOREXPAND) {
849 850
850 if (s->cirrus_blt_mode & CIRRUS_BLTMODE_TRANSPARENTCOMP) { 851 if (s->cirrus_blt_mode & CIRRUS_BLTMODE_TRANSPARENTCOMP) {
851 - if (s->cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV) { 852 + if (s->cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV)
852 cirrus_bitblt_bgcol(s); 853 cirrus_bitblt_bgcol(s);
853 - s->cirrus_rop = cirrus_colorexpand_transp_inv[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1];  
854 - } else { 854 + else
855 cirrus_bitblt_fgcol(s); 855 cirrus_bitblt_fgcol(s);
856 - s->cirrus_rop = cirrus_colorexpand_transp[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1];  
857 - } 856 + s->cirrus_rop = cirrus_colorexpand_transp[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1];
858 } else { 857 } else {
859 cirrus_bitblt_fgcol(s); 858 cirrus_bitblt_fgcol(s);
860 cirrus_bitblt_bgcol(s); 859 cirrus_bitblt_bgcol(s);
861 s->cirrus_rop = cirrus_colorexpand[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; 860 s->cirrus_rop = cirrus_colorexpand[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1];
862 } 861 }
863 } else if (s->cirrus_blt_mode & CIRRUS_BLTMODE_PATTERNCOPY) { 862 } else if (s->cirrus_blt_mode & CIRRUS_BLTMODE_PATTERNCOPY) {
864 - s->cirrus_rop = cirrus_patternfill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; 863 + if (s->cirrus_blt_mode & CIRRUS_BLTMODE_COLOREXPAND) {
  864 + if (s->cirrus_blt_mode & CIRRUS_BLTMODE_TRANSPARENTCOMP) {
  865 + if (s->cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV)
  866 + cirrus_bitblt_bgcol(s);
  867 + else
  868 + cirrus_bitblt_fgcol(s);
  869 + s->cirrus_rop = cirrus_colorexpand_pattern_transp[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1];
  870 + } else {
  871 + cirrus_bitblt_fgcol(s);
  872 + cirrus_bitblt_bgcol(s);
  873 + s->cirrus_rop = cirrus_colorexpand_pattern[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1];
  874 + }
  875 + } else {
  876 + s->cirrus_rop = cirrus_patternfill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1];
  877 + }
865 } else { 878 } else {
866 if (s->cirrus_blt_mode & CIRRUS_BLTMODE_BACKWARDS) { 879 if (s->cirrus_blt_mode & CIRRUS_BLTMODE_BACKWARDS) {
867 s->cirrus_blt_dstpitch = -s->cirrus_blt_dstpitch; 880 s->cirrus_blt_dstpitch = -s->cirrus_blt_dstpitch;
@@ -2793,9 +2806,10 @@ static void cirrus_init_common(CirrusVGAState * s, int device_id, int is_pci) @@ -2793,9 +2806,10 @@ static void cirrus_init_common(CirrusVGAState * s, int device_id, int is_pci)
2793 vga_io_memory); 2806 vga_io_memory);
2794 2807
2795 s->sr[0x06] = 0x0f; 2808 s->sr[0x06] = 0x0f;
2796 - s->sr[0x1F] = 0x22; // MemClock  
2797 if (device_id == CIRRUS_ID_CLGD5446) { 2809 if (device_id == CIRRUS_ID_CLGD5446) {
2798 /* 4MB 64 bit memory config, always PCI */ 2810 /* 4MB 64 bit memory config, always PCI */
  2811 + s->sr[0x1F] = 0x2d; // MemClock
  2812 + s->gr[0x18] = 0x0f; // fastest memory configuration
2799 #if 1 2813 #if 1
2800 s->sr[0x0f] = 0x98; 2814 s->sr[0x0f] = 0x98;
2801 s->sr[0x17] = 0x20; 2815 s->sr[0x17] = 0x20;
@@ -2808,6 +2822,7 @@ static void cirrus_init_common(CirrusVGAState * s, int device_id, int is_pci) @@ -2808,6 +2822,7 @@ static void cirrus_init_common(CirrusVGAState * s, int device_id, int is_pci)
2808 s->real_vram_size = 2048 * 1024; 2822 s->real_vram_size = 2048 * 1024;
2809 #endif 2823 #endif
2810 } else { 2824 } else {
  2825 + s->sr[0x1F] = 0x22; // MemClock
2811 s->sr[0x0F] = CIRRUS_MEMSIZE_2M; 2826 s->sr[0x0F] = CIRRUS_MEMSIZE_2M;
2812 if (is_pci) 2827 if (is_pci)
2813 s->sr[0x17] = CIRRUS_BUSTYPE_PCI; 2828 s->sr[0x17] = CIRRUS_BUSTYPE_PCI;
hw/cirrus_vga_rop2.h
@@ -67,6 +67,12 @@ glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH) @@ -67,6 +67,12 @@ glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH)
67 #elif DEPTH == 16 67 #elif DEPTH == 16
68 col = ((uint16_t *)(src1 + pattern_x))[0]; 68 col = ((uint16_t *)(src1 + pattern_x))[0];
69 pattern_x = (pattern_x + 2) & 15; 69 pattern_x = (pattern_x + 2) & 15;
  70 +#elif DEPTH == 24
  71 + {
  72 + const uint8_t *src2 = src1 + pattern_x * 3;
  73 + col = src2[0] | (src2[1] << 8) | (src2[2] << 16);
  74 + pattern_x = (pattern_x + 1) & 7;
  75 + }
70 #else 76 #else
71 col = ((uint32_t *)(src1 + pattern_x))[0]; 77 col = ((uint32_t *)(src1 + pattern_x))[0];
72 pattern_x = (pattern_x + 4) & 31; 78 pattern_x = (pattern_x + 4) & 31;
@@ -89,21 +95,28 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) @@ -89,21 +95,28 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH)
89 { 95 {
90 uint8_t *d; 96 uint8_t *d;
91 int x, y; 97 int x, y;
92 - unsigned bits; 98 + unsigned bits, bits_xor;
93 unsigned int col; 99 unsigned int col;
94 unsigned bitmask; 100 unsigned bitmask;
95 unsigned index; 101 unsigned index;
96 int srcskipleft = 0; 102 int srcskipleft = 0;
97 103
98 - col = s->cirrus_blt_fgcol; 104 + if (s->cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV) {
  105 + bits_xor = 0xff;
  106 + col = s->cirrus_blt_bgcol;
  107 + } else {
  108 + bits_xor = 0x00;
  109 + col = s->cirrus_blt_fgcol;
  110 + }
  111 +
99 for(y = 0; y < bltheight; y++) { 112 for(y = 0; y < bltheight; y++) {
100 bitmask = 0x80 >> srcskipleft; 113 bitmask = 0x80 >> srcskipleft;
101 - bits = *src++; 114 + bits = *src++ ^ bits_xor;
102 d = dst; 115 d = dst;
103 for (x = 0; x < bltwidth; x += (DEPTH / 8)) { 116 for (x = 0; x < bltwidth; x += (DEPTH / 8)) {
104 if ((bitmask & 0xff) == 0) { 117 if ((bitmask & 0xff) == 0) {
105 bitmask = 0x80; 118 bitmask = 0x80;
106 - bits = *src++; 119 + bits = *src++ ^ bits_xor;
107 } 120 }
108 index = (bits & bitmask); 121 index = (bits & bitmask);
109 if (index) { 122 if (index) {
@@ -116,23 +129,23 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) @@ -116,23 +129,23 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH)
116 } 129 }
117 } 130 }
118 131
119 -/* NOTE: srcpitch is ignored */  
120 static void 132 static void
121 -glue(glue(glue(cirrus_colorexpand_transp_inv_, ROP_NAME), _),DEPTH) 133 +glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH)
122 (CirrusVGAState * s, uint8_t * dst, 134 (CirrusVGAState * s, uint8_t * dst,
123 const uint8_t * src, 135 const uint8_t * src,
124 int dstpitch, int srcpitch, 136 int dstpitch, int srcpitch,
125 int bltwidth, int bltheight) 137 int bltwidth, int bltheight)
126 { 138 {
  139 + uint32_t colors[2];
127 uint8_t *d; 140 uint8_t *d;
128 int x, y; 141 int x, y;
129 unsigned bits; 142 unsigned bits;
130 unsigned int col; 143 unsigned int col;
131 unsigned bitmask; 144 unsigned bitmask;
132 - unsigned index;  
133 int srcskipleft = 0; 145 int srcskipleft = 0;
134 146
135 - col = s->cirrus_blt_bgcol; 147 + colors[0] = s->cirrus_blt_bgcol;
  148 + colors[1] = s->cirrus_blt_fgcol;
136 for(y = 0; y < bltheight; y++) { 149 for(y = 0; y < bltheight; y++) {
137 bitmask = 0x80 >> srcskipleft; 150 bitmask = 0x80 >> srcskipleft;
138 bits = *src++; 151 bits = *src++;
@@ -142,19 +155,54 @@ glue(glue(glue(cirrus_colorexpand_transp_inv_, ROP_NAME), _),DEPTH) @@ -142,19 +155,54 @@ glue(glue(glue(cirrus_colorexpand_transp_inv_, ROP_NAME), _),DEPTH)
142 bitmask = 0x80; 155 bitmask = 0x80;
143 bits = *src++; 156 bits = *src++;
144 } 157 }
145 - index = (bits & bitmask);  
146 - if (!index) { 158 + col = colors[!!(bits & bitmask)];
  159 + PUTPIXEL();
  160 + d += (DEPTH / 8);
  161 + bitmask >>= 1;
  162 + }
  163 + dst += dstpitch;
  164 + }
  165 +}
  166 +
  167 +static void
  168 +glue(glue(glue(cirrus_colorexpand_pattern_transp_, ROP_NAME), _),DEPTH)
  169 + (CirrusVGAState * s, uint8_t * dst,
  170 + const uint8_t * src,
  171 + int dstpitch, int srcpitch,
  172 + int bltwidth, int bltheight)
  173 +{
  174 + uint8_t *d;
  175 + int x, y, bitpos, pattern_y;
  176 + unsigned int bits, bits_xor;
  177 + unsigned int col;
  178 +
  179 + if (s->cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV) {
  180 + bits_xor = 0xff;
  181 + col = s->cirrus_blt_bgcol;
  182 + } else {
  183 + bits_xor = 0x00;
  184 + col = s->cirrus_blt_fgcol;
  185 + }
  186 + pattern_y = s->cirrus_blt_srcaddr & 7;
  187 +
  188 + for(y = 0; y < bltheight; y++) {
  189 + bits = src[pattern_y] ^ bits_xor;
  190 + bitpos = 7;
  191 + d = dst;
  192 + for (x = 0; x < bltwidth; x += (DEPTH / 8)) {
  193 + if ((bits >> bitpos) & 1) {
147 PUTPIXEL(); 194 PUTPIXEL();
148 } 195 }
149 d += (DEPTH / 8); 196 d += (DEPTH / 8);
150 - bitmask >>= 1; 197 + bitpos = (bitpos - 1) & 7;
151 } 198 }
  199 + pattern_y = (pattern_y + 1) & 7;
152 dst += dstpitch; 200 dst += dstpitch;
153 } 201 }
154 } 202 }
155 203
156 static void 204 static void
157 -glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH) 205 +glue(glue(glue(cirrus_colorexpand_pattern_, ROP_NAME), _),DEPTH)
158 (CirrusVGAState * s, uint8_t * dst, 206 (CirrusVGAState * s, uint8_t * dst,
159 const uint8_t * src, 207 const uint8_t * src,
160 int dstpitch, int srcpitch, 208 int dstpitch, int srcpitch,
@@ -162,28 +210,25 @@ glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH) @@ -162,28 +210,25 @@ glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH)
162 { 210 {
163 uint32_t colors[2]; 211 uint32_t colors[2];
164 uint8_t *d; 212 uint8_t *d;
165 - int x, y;  
166 - unsigned bits; 213 + int x, y, bitpos, pattern_y;
  214 + unsigned int bits;
167 unsigned int col; 215 unsigned int col;
168 - unsigned bitmask;  
169 - int srcskipleft = 0;  
170 216
171 colors[0] = s->cirrus_blt_bgcol; 217 colors[0] = s->cirrus_blt_bgcol;
172 colors[1] = s->cirrus_blt_fgcol; 218 colors[1] = s->cirrus_blt_fgcol;
  219 + pattern_y = s->cirrus_blt_srcaddr & 7;
  220 +
173 for(y = 0; y < bltheight; y++) { 221 for(y = 0; y < bltheight; y++) {
174 - bitmask = 0x80 >> srcskipleft;  
175 - bits = *src++; 222 + bits = src[pattern_y];
  223 + bitpos = 7;
176 d = dst; 224 d = dst;
177 for (x = 0; x < bltwidth; x += (DEPTH / 8)) { 225 for (x = 0; x < bltwidth; x += (DEPTH / 8)) {
178 - if ((bitmask & 0xff) == 0) {  
179 - bitmask = 0x80;  
180 - bits = *src++;  
181 - }  
182 - col = colors[!!(bits & bitmask)]; 226 + col = colors[(bits >> bitpos) & 1];
183 PUTPIXEL(); 227 PUTPIXEL();
184 d += (DEPTH / 8); 228 d += (DEPTH / 8);
185 - bitmask >>= 1; 229 + bitpos = (bitpos - 1) & 7;
186 } 230 }
  231 + pattern_y = (pattern_y + 1) & 7;
187 dst += dstpitch; 232 dst += dstpitch;
188 } 233 }
189 } 234 }