The Following 41 Users Say Thank You to Stskeeps For This Useful Post: | ||
412b, Andre Klapper, angun33, attila77, benny1967, Bundyo, buurmas, danramos, derhorst, EIPI, elimoon8, FreeThinker, gazza_d, hyartep, javispedro, jcharpak, jwernerny, kimitake, Kroll, lcuk, linuxeventually, lma, maacruz, Mara, marshel, Milhouse, OVK, pH5, qole, qwerty12, sjgadsby, speculatrix, Texrat, thp, Venemo, vkv.raju, xomm, yerga, ysss |
|
2010-05-12
, 08:22
|
Posts: 2,152 |
Thanked: 1,490 times |
Joined on Jan 2006
@ Czech Republic
|
#2
|
|
2010-05-12
, 09:13
|
|
Posts: 1,671 |
Thanked: 11,478 times |
Joined on Jun 2008
@ Warsaw, Poland
|
#3
|
Next question is where the 3d frame buffers should be stored and how it relates to already preallocated three omapfb planes. This is related to the current allocation failure. As mentioned in older thread I think it should be doable to steal/render into already allocated planes instead of allocating yet another memory dynamically.
This relates to the
PVRSRV_ERROR GetBackBuffer(OMAPLCD_DEVINFO *psDevInfo, IMG_UINT32 ui32Num) procedure. There is code for static memory (flipbuffers array) and dynamic memory and default is dynamic one.
Current sizes of already allocated memory ( see also this)
omapfb: s1d13745 LCD controller rev 1 initialized (CNF pins 3)
omapfb: region0 phys 80600000 virt ffa01000 size=770048 type=0
omapfb: region1 phys 80700000 virt ffabd000 size=786432 type=0
omapfb: region2 phys 87c00000 virt ffb7d000 size=1572864 type=0
omapfb: Framebuffer initialized. Total vram 3129344 planes 3
I think the last plane is good enough for two 800x480x16bits flipbuffers.
The Following 5 Users Say Thank You to Stskeeps For This Useful Post: | ||
|
2010-05-12
, 17:43
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#4
|
The Following User Says Thank You to qole For This Useful Post: | ||
|
2010-05-12
, 17:47
|
|
Posts: 11,700 |
Thanked: 10,045 times |
Joined on Jun 2006
@ North Texas, USA
|
#5
|
If Stskeeps and fanoush start working together on this, we'll have to come up with a superhero team name for them.
Framebuffer flippers? 3D Heroes?
|
2010-05-12
, 18:15
|
Posts: 637 |
Thanked: 445 times |
Joined on Dec 2009
@ Kaliningrad, Russia
|
#6
|
|
2010-05-12
, 19:05
|
|
Posts: 2,355 |
Thanked: 5,249 times |
Joined on Jan 2009
@ Barcelona
|
#7
|
The Following User Says Thank You to javispedro For This Useful Post: | ||
|
2010-05-12
, 21:08
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#8
|
The Following User Says Thank You to qole For This Useful Post: | ||
|
2010-05-12
, 21:14
|
|
Posts: 1,671 |
Thanked: 11,478 times |
Joined on Jun 2008
@ Warsaw, Poland
|
#9
|
The Following 13 Users Say Thank You to Stskeeps For This Useful Post: | ||
|
2010-05-13
, 07:11
|
|
Posts: 1,671 |
Thanked: 11,478 times |
Joined on Jun 2008
@ Warsaw, Poland
|
#10
|
The Following 14 Users Say Thank You to Stskeeps For This Useful Post: | ||
akorvemaker, derhorst, gazza_d, javispedro, jcharpak, Kroll, maacruz, onion, qole, sjgadsby, speculatrix, Termana, Texrat, XTC |
Tags |
accelerated, nokia n8x0 |
|
Instead, this focuses on actually getting the drivers and libraries to play nice. As it really should be possible.
I think we should be focusing on Graphics_SDK/OMAP24xx_MBX_SDK_N8xx/MBX_Linux_KM/embedded/3rdparty/omap24xx_lcd , not the MBX part of it (which looks cross-device).
Now, where do we stand. The first clue is that the OMAPLCD can't get an IRQ. Now, what is this IRQ/interrupt used for? Vsync (omaplcd_linux.c, InstallVsyncISR())
What's Vsync? Some of you may know this from discussions about tearing, etc. In this case, the interrupt it is waiting for, is the signal that it has begun to update the display and we can start filling in the framebuffer with the next frame.
Now, this is what the driver does, except that well, the framebuffer it is filling into, is the one that is 'staging area' for the real LCD framebuffer. In N8x0, this is the old OMAP framebuffer. We have to send a signal to update the LCD framebuffer. This is also why the driver doesn't work for N8x0 as intended but shows results if we really force a framebuffer transfer.
In the old setup, a Vsync interrupt would be the indication to the driver to take a frame from the queue of rendered frames, remove it from the queue and point the framebuffer pointer at it, as I understand it. This is the Flip() stuff mentioned in the kernel.
In our N8x0 setup, we would not have a Vsync interrupt. We might be able to get one through Blizzard though.
We'd be replacing the Flip() command with our own - take a rendered frame from the queue, push it to LCD controller. See blizzard.c in kernel for reference.
However, if we don't have a vsync interrupt, we will have to find some way to push as soon as we get a frame. As far as I can see, omaplcd_ddc_process_vsyncflip is the entry point for the new frames, which gets added into the queue.
So, for starters, I would see if we can hack omaplcd_ddc_process_vsyncflip to do our bidding.
It looks like VSyncFlip takes render items, Flip()s them and then runs a 'command complete' signal.
Now, shouldn't it be in reach to make this driver do our bidding?
EDIT: Wouldn't it work 'for starters' to hack the omaplcd_ddc_process_vsyncflip to flip immediately, not put in queue and have a user process regularly sending the 'update window' ioctl?
As you go on to other communities, remember to build them around politeness, respect, trust and humility. Be wary of poisonous people and deal with them before they end up killing your community.. Seen it happen to too many IRC channels, forums, open source projects.
Last edited by Stskeeps; 2010-05-11 at 20:53.