Jakub Jelinek wrote:
> On Thu, May 16, 2002 at 08:08:02PM -0700, Gareth Hughes wrote:
> 
>>Let's be clear about what I'm proposing: you agree to reserve an 
>>8*sizeof(void *) block at a well-defined and well-known offset in the 
>>TCB.  OpenGL is free to access that block, but only that block.
> 
> 
> But you define no way how libraries can acquire some offset in
> it for its exclusive use, so basically you want a libGL private TCB block.

Yes, that's exactly what I'm proposing.

Having a fixed-size block at a well-known location allows both libGL.so 
and the driver backends to reference things like the current context at 
p_libgl_specific[0] (p_header.__padding[8] today), or in assembly:

                movl %gs:32,%eax

Other variables like the dispatch pointer, GLX context and so on would 
be referenced in the same manner.

The thing is, this works on all implementations from glibc-2.2 onwards. 
  It doesn't require a bleeding-edge binutils or glibc, and it's faster 
than the __thread support.  It requires no functional code changes in 
LinuxThreads (you could even implement the reservation of space with a 
comment specifying that p_header.__padding[8-15] in pthread_descr are 
for libGL internal use only).

You may argue that this places an unmanageable maintenance burden on 
glibc.  This side of the problem boils down to the following: you could 
completely reimplement LinuxThreads, changing the contents of the 
pthread_descr structure (even redo the regular pthreads TLS storage), if 
you just start with the following:

        struct _pthread_descr_struct {
          union {
            /* use this space if required */
            void *__padding[8];
          } p_header;

          /* libGL.so internal use only */
          void *p_libgl_specific[8];

          /* go crazy from here down */
          ...
        };

You'll always have some form of TCB, all I'm asking for is that you 
reserve that chunk of space for libGL at the start.

Don't get me wrong -- I think the __thread stuff is great and certainly 
a step in the right direction.  However, as I described in my original 
posting, OpenGL has special requirements when dealing with thread local 
storage.  In such a performance-critical setting, I'd agree with Keith 
when saying a little bit of special treatment goes a long way.

-- Gareth

_______________________________________________________________

Have big pipes? SourceForge.net is looking for download mirrors. We supply
the hardware. You get the recognition. Email Us: [EMAIL PROTECTED]
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to