Enabling Hardware acceleration in existing framebuffer driver

6 messages, 4 authors, 2008-07-04 · open the first message on its own page

Enabling Hardware acceleration in existing framebuffer driver

From: Keith Williams <hidden>
Date: 2008-07-04 15:56:28

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

Re: Enabling Hardware acceleration in existing framebuffer driver

From: Krzysztof Helt <hidden>
Date: 2008-07-04 16:18:16

On Fri, 04 Jul 2008 11:56:02 -0400
Keith Williams [off-list ref] 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

Re: Enabling Hardware acceleration in existing framebuffer driver

From: Keith Williams <hidden>
Date: 2008-07-04 16:34:24

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

Re: Enabling Hardware acceleration in existing framebuffer driver

From: Krzysztof Helt <hidden>
Date: 2008-07-04 17:28:25

On Fri, 04 Jul 2008 12:33:57 -0400
Keith Williams [off-list ref] 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

Re: Enabling Hardware acceleration in existing framebuffer driver

From: Ville Syrjälä <syrjala@sci.fi>
Date: 2008-07-04 18:21:32

On Fri, Jul 04, 2008 at 07:32:26PM +0200, Krzysztof Helt wrote:
On Fri, 04 Jul 2008 12:33:57 -0400
Keith Williams [off-list ref] wrote:
quoted
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

Re: Enabling Hardware acceleration in existing framebuffer driver

From: Robert Reif <hidden>
Date: 2008-07-04 19:09:43

Ville Syrjälä wrote:
On Fri, Jul 04, 2008 at 07:32:26PM +0200, Krzysztof Helt wrote:
  
quoted
On Fri, 04 Jul 2008 12:33:57 -0400
Keith Williams [off-list ref] wrote:

    
quoted
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:
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help