* Need advice on blitting to dword alignment
@ 2003-09-12 13:52 Thomas S. Iversen
2003-09-12 17:09 ` James Simmons
0 siblings, 1 reply; 7+ messages in thread
From: Thomas S. Iversen @ 2003-09-12 13:52 UTC (permalink / raw)
To: linux-fbdev-devel
Hi There
I am in the final stages of developing a framebufferdriver for
the Silicon Motion Lynx series chip, but ran into troubles
during development of accelerated host blits (mono font expansion to
arbitrary bpp depths)
The Lynx chip expects data in dwords no matter what. If
the image is a multiple of 32 bits wide this is just fine,
but if it is not I have to pad in zeros in the last dword _for
each line_
eg. an 24bit by 16 bit mono image would consist of 1 dword for each line
taking 16 dwords to transfer.
Is there _any_ way I can force the framebuffer console system to give
images aligned to dwords? It is ofcourse possible to transfer data
using a for loop taking the padding into account, but that seems
overly complex and in-efficient compared to a memcpy_toio(src,dst,size)
Any hints or suggestions?
Regards Thomas, Denmark
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Need advice on blitting to dword alignment
2003-09-12 13:52 Need advice on blitting to dword alignment Thomas S. Iversen
@ 2003-09-12 17:09 ` James Simmons
2003-09-12 19:13 ` Thomas S. Iversen
0 siblings, 1 reply; 7+ messages in thread
From: James Simmons @ 2003-09-12 17:09 UTC (permalink / raw)
To: Thomas S. Iversen; +Cc: linux-fbdev-devel
> Hi There
>
> I am in the final stages of developing a framebufferdriver for
> the Silicon Motion Lynx series chip, but ran into troubles
> during development of accelerated host blits (mono font expansion to
> arbitrary bpp depths)
>
> The Lynx chip expects data in dwords no matter what. If
> the image is a multiple of 32 bits wide this is just fine,
> but if it is not I have to pad in zeros in the last dword _for
> each line_
>
> eg. an 24bit by 16 bit mono image would consist of 1 dword for each line
> taking 16 dwords to transfer.
>
> Is there _any_ way I can force the framebuffer console system to give
> images aligned to dwords? It is ofcourse possible to transfer data
> using a for loop taking the padding into account, but that seems
> overly complex and in-efficient compared to a memcpy_toio(src,dst,size)
Yes!!!!
The NVIDIA fbdev driver had the same problems. That is what struct
fb_pixmap is for. Since you need 32 bit padded images you would need to
fill in your own pixmap when you initalize the driver. Something like
this.
info->pixmap.addr = kmalloc(64*1024, GFP_KERNEL);
info->pixmap.size = 64 * 1024;
info->pixmap.buf_align = 4;
info->pixmap.scan_align = 4;
info->pixmap.flags = FB_PIXMAP_SYSTEM;
Okay now what each field means. First is the addr field. This is
scratch drawing area. In the above example I used normal system ram and tell
ths system you are using normal ram with the FB_PIXMAP_SYSTEM flag. The
size is of course the size of the drawing buffer.
Now some systems have a drawing buffer in hardware. A good example is the
Geode graphics chipset. It has a bitblit buffer on chip. In this case you
would point addr to that hardware address and set the flag to FB_PIXMAP_IO.
Then just fill in the data. I just finished the cursor api and have a few
examples of the hardware cursor using something similiar. For the Mach64
cursor I did something like this at initialization.
P.S I didn't not remove the Big endian code or sparc code. I only cleaned
it up to show a easy example.
int __init aty_init_cursor(struct fb_info *info)
{
unsigned long addr;
info->fix.smem_len -= PAGE_SIZE;
addr = (unsigned long) info->screen_base + info->fix.smem_len;
info->sprite.addr = (u8 *) addr;
if (!info->sprite.addr)
return -ENXIO;
info->sprite.size = PAGE_SIZE;
info->sprite.scan_align = 8; // Cursor pad is 64 bits wide
info->sprite.buf_align = 8; // and 64 bits tall.
info->sprite.write_access = 2; // Each pixel is represented by 2 bits
info->sprite.flags = FB_PIXMAP_IO;
info->sprite.outbuf = aty_set_cursor_shape;
}
Here we grab the last page in framebuffer memory and use it as a drawing
pad. Note the flag. Then we provide our our outbuf function. This function
writes data to the buffer. With hardware we might need special magic to
write the data. Also we have a inbuf function for taking data out of a
hardware buffer and placing it into system memory.
This can also be used with DMA memory regions. You can point addr
to the dma region and set the flag to FB_PIXMAP_IO | FB_PIXMAP_SYNC. The
reason is with dma you have to sync the memory region when it is "full".
No async support yet. Again you have to supply your own outbuf and inbuf
functions. Usually with dma you have to place headers at the front the
padded image data and sometimes at the end of it as well. There is a
function to grab a chunck of this memory called fb_get_buffer_offset.
Usually the upper memory layers handle it only but in the case of DMA you
might want to grab you own memory size. I haven't resolved that issue yet.
Scan_align paddes the image data for each scanline. Buf_align pads
the whole chuck of data.
Hope that helps.
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Need advice on blitting to dword alignment
2003-09-12 17:09 ` James Simmons
@ 2003-09-12 19:13 ` Thomas S. Iversen
2003-09-12 19:58 ` Thomas S. Iversen
2003-09-12 21:24 ` James Simmons
0 siblings, 2 replies; 7+ messages in thread
From: Thomas S. Iversen @ 2003-09-12 19:13 UTC (permalink / raw)
To: James Simmons; +Cc: linux-fbdev-devel
On Fri, Sep 12, 2003 at 06:09:56PM +0100, James Simmons wrote:
Hi Again
> The NVIDIA fbdev driver had the same problems. That is what struct
> fb_pixmap is for. Since you need 32 bit padded images you would need to
> fill in your own pixmap when you initalize the driver. Something like
> this.
>
> info->pixmap.addr = kmalloc(64*1024, GFP_KERNEL);
> info->pixmap.size = 64 * 1024;
> info->pixmap.buf_align = 4;
> info->pixmap.scan_align = 4;
> info->pixmap.flags = FB_PIXMAP_SYSTEM;
[snip]
Thanks a million --- you guys truely rocks! The good part is, that
now my mono/font expansion blit actually works and I can actually feel
the improvement when scrolling around in emacs ;-) .... but it came at a cost it
seems:
* My software cursor became messed up/flashing. I suspect that the software cursor
does not work with alignment>1, but is that right??
* Tux, which was nicely drawn using the software fallback before I changed the pixmap
alignment, became messed up.
It made me suspect that the software imageblit does not work when alignment>1,
and further tests seemed to support this. Can I fix it somehow? Or
is it fixed in later kernel versions? (I use 2.5.73 for development at the moment)
Regards Thomas
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Need advice on blitting to dword alignment
2003-09-12 19:13 ` Thomas S. Iversen
@ 2003-09-12 19:58 ` Thomas S. Iversen
2003-09-12 21:26 ` James Simmons
2003-09-12 21:24 ` James Simmons
1 sibling, 1 reply; 7+ messages in thread
From: Thomas S. Iversen @ 2003-09-12 19:58 UTC (permalink / raw)
To: James Simmons; +Cc: linux-fbdev-devel
On Fri, Sep 12, 2003 at 09:13:41PM +0200, Thomas S. Iversen wrote:
Hi
> * Tux, which was nicely drawn using the software fallback before I changed the pixmap
> alignment, became messed up.
I'll find the brown paper bag myself for this one. My code read:
if(image->depth!=1)
cfb_imageblit(info,image);
.... accelerated depth==1 code
instead of
if(image->depth!=1)
return cfb_imageblit(info,image);
.... accelerated depth==1 code
That gave me my tux back. My curser however is still broken. I have also
tried to do a software blitt with both the alignemnt options set to 4 and
it does not appear to work :-/
Regards Thomas
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Need advice on blitting to dword alignment
2003-09-12 19:13 ` Thomas S. Iversen
2003-09-12 19:58 ` Thomas S. Iversen
@ 2003-09-12 21:24 ` James Simmons
1 sibling, 0 replies; 7+ messages in thread
From: James Simmons @ 2003-09-12 21:24 UTC (permalink / raw)
To: Thomas S. Iversen; +Cc: linux-fbdev-devel
> Thanks a million --- you guys truely rocks! The good part is, that
> now my mono/font expansion blit actually works and I can actually feel
> the improvement when scrolling around in emacs ;-) .... but it came at a cost it
> seems:
Cool.
> * My software cursor became messed up/flashing. I suspect that the software cursor
> does not work with alignment>1, but is that right??
This is fixed in later kernels. A few issues remain tho with the software
cursor in the latest kernels.
> * Tux, which was nicely drawn using the software fallback before I changed the pixmap
> alignment, became messed up.
I seen the other email.
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Need advice on blitting to dword alignment
2003-09-12 19:58 ` Thomas S. Iversen
@ 2003-09-12 21:26 ` James Simmons
2003-09-13 5:17 ` Thomas S. Iversen
0 siblings, 1 reply; 7+ messages in thread
From: James Simmons @ 2003-09-12 21:26 UTC (permalink / raw)
To: Thomas S. Iversen; +Cc: linux-fbdev-devel
> instead of
>
> if(image->depth!=1)
> return cfb_imageblit(info,image);
>
> .... accelerated depth==1 code
No hardware support to draw color images :-(
> That gave me my tux back. My curser however is still broken.
Cursor broken in 2.5.73.
> I have also
> tried to do a software blitt with both the alignemnt options set to 4 and
> it does not appear to work :-/
You mean a cfb_copyarea call?
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Need advice on blitting to dword alignment
2003-09-12 21:26 ` James Simmons
@ 2003-09-13 5:17 ` Thomas S. Iversen
0 siblings, 0 replies; 7+ messages in thread
From: Thomas S. Iversen @ 2003-09-13 5:17 UTC (permalink / raw)
To: James Simmons; +Cc: linux-fbdev-devel
On Fri, Sep 12, 2003 at 10:26:33PM +0100, James Simmons wrote:
> No hardware support to draw color images :-(
No, not at the moment, will look into that later; my
time is, like everybody else, limited :-(
> Cursor broken in 2.5.73.
Ahh, I will try some of the later kernels. Or add support
for hardware cursor when time permits :-)
> You mean a cfb_copyarea call?
No a cfb_imageblit(info,image) call. My code looked roughly like
during development:
void lynxfb_imageblit(info, image) {
if(image->depth!=1)
return cfb_imageblit(info,image);
hardware accelerated font blit of
the requested image, but
_hardwired_ to start at 0,0
cfb_imageblit(info,image); //At the right position
}
When I set alignment to 1 the code above does produce a normal
console except for the top line which are blitted wrong by
the hardware.
If I change alignment to 4, the hardware blits correctly, but
the rest of screen become garbage (sort of, one get a staircase effect,
probably because of the alignment)
It is not a problem anymore, now that the hardware blitting
works for me, but I will see if I get the same effect in 2.6.0pre
kernels at the same time as I hope for the cursor to turn up all
normal again ;-)
Thanks for your help
Regards Thomas
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2003-09-13 5:18 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-09-12 13:52 Need advice on blitting to dword alignment Thomas S. Iversen
2003-09-12 17:09 ` James Simmons
2003-09-12 19:13 ` Thomas S. Iversen
2003-09-12 19:58 ` Thomas S. Iversen
2003-09-12 21:26 ` James Simmons
2003-09-13 5:17 ` Thomas S. Iversen
2003-09-12 21:24 ` James Simmons
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).