int bpp;
bpp = src->mode_info->bytes_per_pixel;
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
grub_memmove (dstptr, srcptr, width * bpp);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, src->mode_info->pitch);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dst->mode_info->pitch);
}
}
int i;
int j;
grub_uint8_t *srcptr;
- grub_uint8_t *dstptr;
+ grub_uint32_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
for (i = 0; i < width; i++)
{
if (*srcptr & srcmask)
- *(grub_uint32_t *) dstptr = fgcolor;
+ *dstptr = fgcolor;
else
- *(grub_uint32_t *) dstptr = bgcolor;
+ *dstptr = bgcolor;
srcmask >>= 1;
if (!srcmask)
{
srcmask = 0x80;
}
- dstptr += 4;
+ dstptr++;
}
srcptr += srcrowskipbyte;
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
- dstptr += dstrowskip;
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
+#ifdef GRUB_HAVE_UNALIGNED_ACCESS
/* Optimized replacing blitter for 1-bit to 24-bit. */
void
grub_video_fbblit_replace_24bit_1bit (struct grub_video_fbblit_info *dst,
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
dstptr += dstrowskip;
}
}
+#endif
/* Optimized replacing blitter for 1-bit to 16-bit. */
void
int i;
int j;
grub_uint8_t *srcptr;
- grub_uint8_t *dstptr;
+ grub_uint16_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
for (i = 0; i < width; i++)
{
if (*srcptr & srcmask)
- *(grub_uint16_t *) dstptr = fgcolor;
+ *dstptr = fgcolor;
else
- *(grub_uint16_t *) dstptr = bgcolor;
+ *dstptr = bgcolor;
srcmask >>= 1;
if (!srcmask)
{
srcmask = 0x80;
}
- dstptr += 2;
+ dstptr++;
}
srcptr += srcrowskipbyte;
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
- dstptr += dstrowskip;
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
for (i = 0; i < width; i++)
{
if (*srcptr & srcmask)
- *(grub_uint8_t *) dstptr = fgcolor;
+ *dstptr = fgcolor;
else
- *(grub_uint8_t *) dstptr = bgcolor;
+ *dstptr = bgcolor;
srcmask >>= 1;
if (!srcmask)
{
srcrowskip = src->mode_info->pitch - src->mode_info->bytes_per_pixel * width;
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
- srcptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (src, offset_x, offset_y);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
srcrowskip = src->mode_info->pitch - src->mode_info->bytes_per_pixel * width;
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
- srcptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (src, offset_x, offset_y);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
srcrowskip = src->mode_info->pitch - src->mode_info->bytes_per_pixel * width;
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
- srcptr = (grub_uint32_t *) grub_video_fb_get_video_ptr (src, offset_x, offset_y);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
*dstptr++ = sr;
}
- srcptr = (grub_uint32_t *) (((grub_uint8_t *) srcptr) + srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
dstptr += dstrowskip;
}
}
srcrowskip = src->mode_info->pitch - src->mode_info->bytes_per_pixel * width;
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
- srcptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (src, offset_x, offset_y);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
unsigned int sr;
unsigned int sg;
unsigned int sb;
+ grub_size_t srcrowskip;
+ grub_size_t dstrowskip;
+
+ srcrowskip = src->mode_info->pitch - 3 * width;
+ dstrowskip = dst->mode_info->pitch - 4 * width;
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint8_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
for (i = 0; i < width; i++)
{
sr = *srcptr++;
*dstptr++ = color;
}
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
unsigned int sr;
unsigned int sg;
unsigned int sb;
+ grub_size_t srcrowskip;
+ grub_size_t dstrowskip;
+
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
+ srcrowskip = src->mode_info->pitch - 4 * width;
+ dstrowskip = dst->mode_info->pitch - 3 * width;
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint8_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
for (i = 0; i < width; i++)
{
color = *srcptr++;
*dstptr++ = sg;
*dstptr++ = sb;
}
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
unsigned int sr;
unsigned int sg;
unsigned int sb;
+ grub_size_t srcrowskip;
+ grub_size_t dstrowskip;
+
+ srcrowskip = src->mode_info->pitch - 4 * width;
+ dstrowskip = dst->mode_info->pitch - width;
+
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint8_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
for (i = 0; i < width; i++)
{
color = *srcptr++;
color = grub_video_fb_map_rgb(sr, sg, sb);
*dstptr++ = color & 0xFF;
}
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
unsigned int sr;
unsigned int sg;
unsigned int sb;
+ grub_size_t srcrowskip;
+ grub_size_t dstrowskip;
+
+ srcrowskip = src->mode_info->pitch - 3 * width;
+ dstrowskip = dst->mode_info->pitch - width;
+
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint8_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint8_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
for (i = 0; i < width; i++)
{
sr = *srcptr++;
*dstptr++ = color & 0xFF;
}
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
srcrowskip = src->mode_info->pitch - src->mode_info->bytes_per_pixel * width;
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
- srcptr = (grub_uint32_t *) grub_video_fb_get_video_ptr (src, offset_x, offset_y);
- dstptr = (grub_uint32_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
*dstptr++ = color;
}
- srcptr = (grub_uint32_t *) (((grub_uint8_t *) srcptr) + srcrowskip);
- dstptr = (grub_uint32_t *) (((grub_uint8_t *) dstptr) + dstrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
srcrowskip = src->mode_info->pitch - src->mode_info->bytes_per_pixel * width;
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
- srcptr = (grub_uint32_t *) grub_video_fb_get_video_ptr (src, offset_x, offset_y);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
*dstptr++ = dr;
}
- srcptr = (grub_uint32_t *) (((grub_uint8_t *) srcptr) + srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
dstptr += dstrowskip;
}
}
unsigned int dr;
unsigned int dg;
unsigned int db;
+ grub_size_t srcrowskip;
+ grub_size_t dstrowskip;
+
+ srcrowskip = src->mode_info->pitch - 4 * width;
+ dstrowskip = dst->mode_info->pitch - 4 * width;
+
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
for (i = 0; i < width; i++)
{
color = *srcptr++;
*dstptr++ = color;
}
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
unsigned int dr;
unsigned int dg;
unsigned int db;
+ grub_size_t srcrowskip;
+ grub_size_t dstrowskip;
+
+ srcrowskip = src->mode_info->pitch - 4 * width;
+ dstrowskip = dst->mode_info->pitch - 3 * width;
+
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint8_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
for (i = 0; i < width; i++)
{
color = *srcptr++;
*dstptr++ = dg;
*dstptr++ = db;
}
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
unsigned char dg;
unsigned char db;
unsigned char da;
+ grub_size_t srcrowskip;
+ grub_size_t dstrowskip;
+
+ srcrowskip = src->mode_info->pitch - 4 * width;
+ dstrowskip = dst->mode_info->pitch - width;
+
+ srcptr = grub_video_fb_get_video_ptr (src, offset_x, offset_y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
for (j = 0; j < height; j++)
{
- srcptr = (grub_uint32_t *)grub_video_fb_get_video_ptr (src, offset_x, j + offset_y);
- dstptr = (grub_uint8_t *)grub_video_fb_get_video_ptr (dst, x, y + j);
-
for (i = 0; i < width; i++)
{
color = *srcptr++;
*dstptr++ = color & 0xFF;
}
+ GRUB_VIDEO_FB_ADVANCE_POINTER (srcptr, srcrowskip);
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
int i;
int j;
grub_uint8_t *srcptr;
- grub_uint8_t *dstptr;
+ grub_uint32_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
}
if (a == 255)
- *(grub_uint32_t *) dstptr = color;
+ *dstptr = color;
else if (a != 0)
{
grub_uint8_t s1 = (color >> 0) & 0xFF;
grub_uint8_t s2 = (color >> 8) & 0xFF;
grub_uint8_t s3 = (color >> 16) & 0xFF;
- grub_uint8_t d1 = (*(grub_uint32_t *) dstptr >> 0) & 0xFF;
- grub_uint8_t d2 = (*(grub_uint32_t *) dstptr >> 8) & 0xFF;
- grub_uint8_t d3 = (*(grub_uint32_t *) dstptr >> 16) & 0xFF;
+ grub_uint8_t d1 = (*dstptr >> 0) & 0xFF;
+ grub_uint8_t d2 = (*dstptr >> 8) & 0xFF;
+ grub_uint8_t d3 = (*dstptr >> 16) & 0xFF;
d1 = (d1 * (255 - a) + s1 * a) / 255;
d2 = (d2 * (255 - a) + s2 * a) / 255;
d3 = (d3 * (255 - a) + s3 * a) / 255;
- *(grub_uint32_t *) dstptr = (a << 24) | (d3 << 16) | (d2 << 8)
- | d1;
+ *dstptr = (a << 24) | (d3 << 16) | (d2 << 8) | d1;
}
srcmask >>= 1;
srcmask = 0x80;
}
- dstptr += 4;
+ dstptr++;
}
srcptr += srcrowskipbyte;
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
- dstptr += dstrowskip;
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}
/* Optimized blending blitter for 1-bit to XXX888. */
+#ifdef GRUB_HAVE_UNALIGNED_ACCESS
void
grub_video_fbblit_blend_XXX888_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
dstptr += dstrowskip;
}
}
+#endif
/* Optimized blending blitter for 1-bit to XXX888. */
void
int i;
int j;
grub_uint8_t *srcptr;
- grub_uint8_t *dstptr;
+ grub_uint16_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
- dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
+ dstptr = grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
}
if (a == 255)
- *(grub_uint16_t *) dstptr = color;
+ *dstptr = color;
else if (a != 0)
{
grub_uint8_t s1 = (color >> 0) & 0x1F;
grub_uint8_t s2 = (color >> 5) & 0x3F;
grub_uint8_t s3 = (color >> 11) & 0x1F;
- grub_uint8_t d1 = (*(grub_uint16_t *) dstptr >> 0) & 0x1F;
- grub_uint8_t d2 = (*(grub_uint16_t *) dstptr >> 5) & 0x3F;
- grub_uint8_t d3 = (*(grub_uint16_t *) dstptr >> 11) & 0x1F;
+ grub_uint8_t d1 = (*dstptr >> 0) & 0x1F;
+ grub_uint8_t d2 = (*dstptr >> 5) & 0x3F;
+ grub_uint8_t d3 = (*dstptr >> 11) & 0x1F;
d1 = (d1 * (255 - a) + s1 * a) / 255;
d2 = (d2 * (255 - a) + s2 * a) / 255;
d3 = (d3 * (255 - a) + s3 * a) / 255;
- *(grub_uint16_t *) dstptr = (d1 & 0x1f) | ((d2 & 0x3f) << 5)
- | ((d3 & 0x1f) << 11);
+ *dstptr = (d1 & 0x1f) | ((d2 & 0x3f) << 5) | ((d3 & 0x1f) << 11);
}
srcmask >>= 1;
srcmask = 0x80;
}
- dstptr += 2;
+ dstptr++;
}
srcptr += srcrowskipbyte;
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
- dstptr += dstrowskip;
+ GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip);
}
}