Hi, Dave,
Dave Airlie wrote:
> Hi,
>
> I've done a port of miniglx to a TTM-only system (no legacy buffers),
>
> It's in the miniglx-ttm-only branch of my personal mesa repo..
> http://gitweb.freedesktop.org/?p=users/airlied/mesa.git;a=shortlog;h=miniglx-ttm-only
>
>
Cool!
> It is just an example of how to use drmBOs to allocate the memory spaces
> and buffers, it isn't 100% stable but I can run manytex on it for a while
> before it crashes, it also requires hacks to the drm to remove the master
> only on the drawable ioctls (nothing to do with TTM just a miniglx
> limitaton due to laziness..) and there are couple of changes from Thomas
> to fix the user object lookup which hopefully he'll push soon to the drm..
>
> I'm probably allocating the front/back/depth wrongly I think it should
> probably use NO_MOVE instead of NO_EVICT and have the client side validate
> things on lock as in theory with rotation/resizing these buffers could
> change size.. I'll see if I can arrange that..
>
>
After some thinking, I think the best thing to do here is for the server
to do the following
when the front / back /depth buffers need to change
LOCK_HARDWARE()
drmBOValidate(buf, DRM_BO_MEM_LOCAL, DRM_BO_MASK_MEM |
DRM_BO_FLAG_NO_EVICT,
DRM_BO_HINT_DONT_FENCE); // Wait for buffer idle, unmark the
no_evict flag, and throw out the buffer to system memory.
drmBODestroy(buf); // Decrease refcount on buffer, but there are other
clients holding references so it won't be destroyed yet.
allocateNewBuffer();
updateSarea();
UNLOCK_HARDWARE()
The client will detect that there is a new buffer when checking the
sarea after a lock, and will free all references to
the old buffer without validating it. At the same time, the old buffer
won't take up precious vram / tt space when the new
buffer is allocated, and we will avoid fragmentation. However, there
will be a copy from vram / tt to local memory which is fast, but
undesirable.
Really the best thing to do here is to add a "Zombie" state to the
buffer, and add some code for that to DRM.
Only the buffer creator can mark the buffer as zombie, and then all
resources are freed. A zombie buffer may not be
validated, (then we can catch clients trying to use obsolete shared
buffers, and we avoid a copy of obsolete buffer data).
/Thomas
> I have to say the drmBO interface so far seems to act like I would expect
> them to and I wish we had them years ago :-)
>
> Dave.
>
>
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel