From: Andreas Oberritter Date: Wed, 16 Mar 2011 12:59:25 +0000 (+0100) Subject: Merge branch 'obi/bcm_accel' X-Git-Tag: 3.1.0~5 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/ac2878879847f965225e0f72c22ad17b513c16e6?hp=-c Merge branch 'obi/bcm_accel' --- ac2878879847f965225e0f72c22ad17b513c16e6 diff --combined lib/gdi/accel.cpp index fc739e92,5049f0b8..bd1439f2 --- a/lib/gdi/accel.cpp +++ b/lib/gdi/accel.cpp @@@ -112,7 -112,7 +112,7 @@@ int gAccel::blit(gSurface *dst, const g pal_addr = src->stride * src->y; unsigned long *pal = (unsigned long*)(((unsigned char*)src->data) + pal_addr); pal_addr += src->data_phys; - for (i = 0; i < 256; ++i) + for (i = 0; i < src->clut.colors; ++i) *pal++ = src->clut.data[i].argb() ^ 0xFF000000; } else return -1; /* unsupported source format */ @@@ -138,12 -138,14 +138,14 @@@ int gAccel::fill(gSurface *dst, const e col); return 0; #endif - #if 0 // def BCM_ACCEL - bcm_accel_fill( - dst->data_phys, dst->x, dst->y, dst->stride, - area.left(), area.top(), area.width(), area.height(), - col); - return 0; + #ifdef BCM_ACCEL + if (!m_bcm_accel_state) { + bcm_accel_fill( + dst->data_phys, dst->x, dst->y, dst->stride, + area.left(), area.top(), area.width(), area.height(), + col); + return 0; + } #endif return -1; } diff --combined lib/gdi/bcm.cpp index ccf16f41,10219947..b215b108 --- a/lib/gdi/bcm.cpp +++ b/lib/gdi/bcm.cpp @@@ -23,10 -23,10 +23,10 @@@ static int exec_list(void) int bcm_accel_init(void) { - fb_fd = open("/dev/fb/0", O_RDWR); + fb_fd = open("/dev/fb0", O_RDWR); if (fb_fd < 0) { - perror("/dev/fb/0"); + perror("/dev/fb0"); return 1; } if (exec_list()) @@@ -123,6 -123,51 +123,51 @@@ void bcm_accel_fill int x, int y, int width, int height, unsigned long color) { - // printf("unimplemented bcm_accel_fill\n"); + C(0x43); // reset source + C(0x53); // reset dest + C(0x5b); // reset pattern + C(0x67); // reset blend + C(0x75); // reset output + + // clear dest surface + P(0x0, 0); + P(0x1, 0); + P(0x2, 0); + P(0x3, 0); + P(0x4, 0); + C(0x45); + + // clear src surface + P(0x0, 0); + P(0x1, 0); + P(0x2, 0); + P(0x3, 0); + P(0x4, 0); + C(0x5); + + P(0x2d, color); + + P(0x2e, x); // prepare output rect + P(0x2f, y); + P(0x30, width); + P(0x31, height); + C(0x6e); // set this rect as output rect + + P(0x0, dst_addr); // prepare output surface + P(0x1, dst_stride); + P(0x2, dst_width); + P(0x3, dst_height); + P(0x4, 0x7e48888); + C(0x69); // set output surface + + P(0x6f, 0); + P(0x70, 0); + P(0x71, 2); + P(0x72, 2); + C(0x73); // select color keying + + C(0x77); // do it + + exec_list(); }