* Enabling Hardware acceleration in existing framebuffer driver
@ 2008-07-04 15:56 Keith Williams
2008-07-04 16:22 ` Krzysztof Helt
0 siblings, 1 reply; 6+ messages in thread
From: Keith Williams @ 2008-07-04 15:56 UTC (permalink / raw)
To: linux-fbdev-devel
Hi, all,
I have an embedded board with a s1d13506 epson display chip. There is a
s1d13xxxfb driver that was written for the '806 that generally works
well for the '506.
The '506 does have some 2D hardware acceleration capabilities. Last
night I wrote a fillrect routine as an initial test of how much
performance improvement I could potentially see from enabling acceleration.
However, neither DirectFB nor fbset is picking up on the enabled
acceleration. I'm not sure if there is something more that I need to do.
Below are portions of the driver that I modified:
info->par = default_par;
info->fbops = &s1d13xxxfb_fbops;
info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |
FBINFO_HWACCEL_FILLRECT;
--The above should set the fb_info flags to show that fillrect
acceleration is available
void s1d13xxxfb_fillrect (struct fb_info *p, const struct fb_fillrect *rect)
{
u32 destination_address;
struct s1d13xxxfb_par *par = p->par;
if (p->state != FBINFO_STATE_RUNNING)
return;
destination_address = (((rect->dy)*480*2)+(rect->dx)*2);
s1d13xxxfb_writereg(par, S1DREG_BBLT_DST_START0,
(destination_address & 0xff));
s1d13xxxfb_writereg(par, S1DREG_BBLT_DST_START1,
((destination_address >> 8) & 0xff));
s1d13xxxfb_writereg(par, S1DREG_BBLT_DST_START2,
((destination_address >> 16) & 0xff));
/// SNIP ///
--This is the beginning of the fillrect acceleration routine (right now
just hardcoded for my particular set-up)
/* framebuffer information structures */
static struct fb_ops s1d13xxxfb_fbops = {
.owner = THIS_MODULE,
.fb_set_par = s1d13xxxfb_set_par,
.fb_setcolreg = s1d13xxxfb_setcolreg,
.fb_blank = s1d13xxxfb_blank,
.fb_pan_display = s1d13xxxfb_pan_display,
/* to be replaced by any acceleration we can */
.fb_fillrect = s1d13xxxfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
};
--This is I've added the s1d13xxxfb_fillrect to the fb_ops structure.
Is there anything else that I need to do?
Thanks for any insight.
Keith
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: Enabling Hardware acceleration in existing framebuffer driver 2008-07-04 15:56 Enabling Hardware acceleration in existing framebuffer driver Keith Williams @ 2008-07-04 16:22 ` Krzysztof Helt 2008-07-04 16:33 ` Keith Williams 0 siblings, 1 reply; 6+ messages in thread From: Krzysztof Helt @ 2008-07-04 16:22 UTC (permalink / raw) To: Keith Williams; +Cc: linux-fbdev-devel On Fri, 04 Jul 2008 11:56:02 -0400 Keith Williams <espian@linuxinstruments.com> wrote: > Hi, all, > > The '506 does have some 2D hardware acceleration capabilities. Last > night I wrote a fillrect routine as an initial test of how much > performance improvement I could potentially see from enabling acceleration. > > However, neither DirectFB nor fbset is picking up on the enabled > acceleration. I'm not sure if there is something more that I need to do. > The fillrect acceleration is probably used but rarely. One sure way to trigger it is to issue the "clear" command on the frame buffer console. Try "time clear" on a big resolution screen with and without your change. You should see a difference from few to few tens times in speed. The more useful is both the copyarea and imageblit acceleration. Both are used during console scrolling (the imageblit is preferred but on some cards the copyarea is faster). I don't know about the DirectFB so I cannot comment. Regards, Krzysztof ---------------------------------------------------------------------- Nie ma jak Hold'em. Zagraj w pokera! Kliknij >>> http://link.interia.pl/f1e68 ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Enabling Hardware acceleration in existing framebuffer driver 2008-07-04 16:22 ` Krzysztof Helt @ 2008-07-04 16:33 ` Keith Williams 2008-07-04 17:32 ` Krzysztof Helt 0 siblings, 1 reply; 6+ messages in thread From: Keith Williams @ 2008-07-04 16:33 UTC (permalink / raw) To: linux-fbdev-devel > The fillrect acceleration is probably used but rarely. > One sure way to trigger it is to issue the "clear" command on the > frame buffer console. Try "time clear" on a big resolution screen with and > without your change. You should see a difference from few to few tens times > in speed. > > The more useful is both the copyarea and imageblit acceleration. Both are > used during console scrolling (the imageblit is preferred but on some cards > the copyarea is faster). > > I don't know about the DirectFB so I cannot comment. > > Thanks for the reply. The fillrect was the simplest to implement. I agree that the others will be much higher value. In DirectFB there are a set of benchmarks that run through all of the different drawing types including filled rectangles. That is what I am using as my baseline. However, even with the above code I don't see a change in the benchmark numbers leading me to believe that the acceleration is not being used. Additionally, fbset shows accel to be false. Even if I do a "fbset -accel true", it still reports false. This is why I don't believe that the acceleration is being picked-up. Any other ideas with the driver code/things that I am missing? Thanks, Keith ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Enabling Hardware acceleration in existing framebuffer driver 2008-07-04 16:33 ` Keith Williams @ 2008-07-04 17:32 ` Krzysztof Helt 2008-07-04 18:21 ` Ville Syrjälä 0 siblings, 1 reply; 6+ messages in thread From: Krzysztof Helt @ 2008-07-04 17:32 UTC (permalink / raw) To: Keith Williams; +Cc: linux-fbdev-devel On Fri, 04 Jul 2008 12:33:57 -0400 Keith Williams <espian@linuxinstruments.com> wrote: > The fillrect was the simplest to implement. I agree that the others > will be much higher value. > > In DirectFB there are a set of benchmarks that run through all of the > different drawing types including filled rectangles. That is what I am > using as my baseline. > I don't know DirectFB. I am not sure if the DirectFB uses the frame buffer acceleration or its own. > However, even with the above code I don't see a change in the benchmark > numbers leading me to believe that the acceleration is not being used. > Please do simple test: give "time clear" command from the command line. > Additionally, fbset shows accel to be false. Even if I do a "fbset > -accel true", it still reports false. > AFAIK, the fbset tool uses the obsolete FB_ACCELF_TEXT flag. If your driver does not set this flag and does not use it you won't see any difference. > This is why I don't believe that the acceleration is being picked-up. The only sure way is to put printk inside the fillrect function and watch if it appeared in the dmesg output. The "clear" command is good at useing the fillrect acceleration. Regards, Krzysztof ---------------------------------------------------------------------- Pogoda na dzis. Sprawdz >>> http://link.interia.pl/f1e42 ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Enabling Hardware acceleration in existing framebuffer driver 2008-07-04 17:32 ` Krzysztof Helt @ 2008-07-04 18:21 ` Ville Syrjälä 2008-07-04 19:09 ` Robert Reif 0 siblings, 1 reply; 6+ messages in thread From: Ville Syrjälä @ 2008-07-04 18:21 UTC (permalink / raw) To: Krzysztof Helt; +Cc: linux-fbdev-devel On Fri, Jul 04, 2008 at 07:32:26PM +0200, Krzysztof Helt wrote: > On Fri, 04 Jul 2008 12:33:57 -0400 > Keith Williams <espian@linuxinstruments.com> wrote: > > > The fillrect was the simplest to implement. I agree that the others > > will be much higher value. > > > > In DirectFB there are a set of benchmarks that run through all of the > > different drawing types including filled rectangles. That is what I am > > using as my baseline. > > > > I don't know DirectFB. I am not sure if the DirectFB uses the frame buffer > acceleration or its own. DirectFB has it's own low level gfx drivers. It can use fbdev for mode switching but that's all. In fact there is no way to call fbdev accel code from userspace. -- Ville Syrjälä syrjala@sci.fi http://www.sci.fi/~syrjala/ ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Enabling Hardware acceleration in existing framebuffer driver 2008-07-04 18:21 ` Ville Syrjälä @ 2008-07-04 19:09 ` Robert Reif 0 siblings, 0 replies; 6+ messages in thread From: Robert Reif @ 2008-07-04 19:09 UTC (permalink / raw) To: Krzysztof Helt, Keith Williams, linux-fbdev-devel [-- Attachment #1: Type: text/plain, Size: 926 bytes --] Ville Syrjälä wrote: > On Fri, Jul 04, 2008 at 07:32:26PM +0200, Krzysztof Helt wrote: > >> On Fri, 04 Jul 2008 12:33:57 -0400 >> Keith Williams <espian@linuxinstruments.com> wrote: >> >> >>> The fillrect was the simplest to implement. I agree that the others >>> will be much higher value. >>> >>> In DirectFB there are a set of benchmarks that run through all of the >>> different drawing types including filled rectangles. That is what I am >>> using as my baseline. >>> >>> >> I don't know DirectFB. I am not sure if the DirectFB uses the frame buffer >> acceleration or its own. >> > > DirectFB has it's own low level gfx drivers. It can use fbdev for mode > switching but that's all. > > In fact there is no way to call fbdev accel code from userspace. > > I'm adding hardware acceleration to the sparc leo driver and this is what I am using for user space testing: [-- Attachment #2: fbmem.diff.txt --] [-- Type: text/plain, Size: 1645 bytes --] diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 776f7fc..14d5586 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -1023,6 +1023,9 @@ fb_ioctl(struct inode *inode, struct fil struct fb_con2fbmap con2fb; struct fb_cmap_user cmap; struct fb_event event; + struct fb_copyarea area; + struct fb_fillrect rect; + struct fb_image image; void __user *argp = (void __user *)arg; int i; @@ -1103,6 +1106,27 @@ #endif /* CONFIG_KMOD */ info->flags &= ~FBINFO_MISC_USEREVENT; release_console_sem(); return i; + case FBIOFILLRECT: + if (copy_from_user(&rect, argp, sizeof(rect))) + return -EFAULT; + acquire_console_sem(); + fb->fb_fillrect(info, &rect); + release_console_sem(); + return 0; + case FBIOCOPYAREA: + if (copy_from_user(&area, argp, sizeof(area))) + return -EFAULT; + acquire_console_sem(); + fb->fb_copyarea(info, &area); + release_console_sem(); + return 0; + case FBIOIMAGEBLIT: + if (copy_from_user(&image, argp, sizeof(image))) + return -EFAULT; + acquire_console_sem(); + fb->fb_imageblit(info, &image); + release_console_sem(); + return 0; default: if (fb->fb_ioctl == NULL) return -EINVAL; diff --git a/include/linux/fb.h b/include/linux/fb.h index 72295b0..a369d0f 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -38,6 +38,9 @@ #define FBIOGET_GLYPH 0x4615 #define FBIOGET_HWCINFO 0x4616 #define FBIOPUT_MODEINFO 0x4617 #define FBIOGET_DISPINFO 0x4618 +#define FBIOFILLRECT 0x4619 +#define FBIOCOPYAREA 0x461A +#define FBIOIMAGEBLIT 0x461B #define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */ [-- Attachment #3: fbtest.diff.txt --] [-- Type: text/plain, Size: 1823 bytes --] Index: fb.c =================================================================== RCS file: /cvsroot/linux-fbdev/FBdev/utlilities/fbtest/fb.c,v retrieving revision 1.7 diff -r1.7 fb.c 30c30 < static int fb_fd = -1; --- > int fb_fd = -1; Index: include/fb.h =================================================================== RCS file: /cvsroot/linux-fbdev/FBdev/utlilities/fbtest/include/fb.h,v retrieving revision 1.2 diff -r1.2 fb.h 19a20 > extern int fb_fd; Index: tests/test001.c =================================================================== RCS file: /cvsroot/linux-fbdev/FBdev/utlilities/fbtest/tests/test001.c,v retrieving revision 1.1 diff -r1.1 test001.c 11a12 > #include <errno.h> 12a14,16 > #include <stdlib.h> > #include <string.h> > #include <sys/ioctl.h> 23a28,29 > #define FBIOFILLRECT 0x4619 > 28a35,38 > u8 * screen; > u32 bytes; > struct fb_fillrect rect; > enum test_res res = TEST_OK; 37a48,74 > > bytes = (fb_var.xres * fb_var.yres * fb_var.bits_per_pixel) / 8; > if (!(screen = malloc(bytes))) > Fatal("malloc %d: %s\n", bytes, strerror(errno)); > memcpy(screen, fb, bytes); > > for (i = 1, y0 = 0; i <= Y_BLOCKS; i++, y0 = y1) { > y1 = i*fb_var.yres/Y_BLOCKS; > for (j = 1, x0 = 0; j <= X_BLOCKS; j++, x0 = x1) { > pixel = (i+j) & 1 ? white_pixel : black_pixel; > x1 = j*fb_var.xres/X_BLOCKS; > rect.dx = x0; > rect.dy = y0; > rect.width = x1 - x0; > rect.height = y1 - y0; > rect.color = (i+j) & 1 ? 15 : 0; > rect.rop = ROP_COPY; > > if (ioctl(fb_fd, FBIOFILLRECT, &rect) == -1) { > Fatal("ioctl FBIOFILLRECT: %s\n", strerror(errno)); > } > } > } > > if (memcmp(screen, fb, bytes) != 0) > res = TEST_FAIL; > free(screen); 39c76 < return TEST_OK; --- > return res; [-- Attachment #4: Type: text/plain, Size: 347 bytes --] ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 [-- Attachment #5: Type: text/plain, Size: 182 bytes --] _______________________________________________ Linux-fbdev-devel mailing list Linux-fbdev-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-07-04 19:09 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-07-04 15:56 Enabling Hardware acceleration in existing framebuffer driver Keith Williams 2008-07-04 16:22 ` Krzysztof Helt 2008-07-04 16:33 ` Keith Williams 2008-07-04 17:32 ` Krzysztof Helt 2008-07-04 18:21 ` Ville Syrjälä 2008-07-04 19:09 ` Robert Reif
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).