* Fwd: [Dri-devel] Proposed DRI driver interface changes (all people interested in pbuffers please read!)
@ 2003-08-30 17:20 Jon Smirl
0 siblings, 0 replies; only message in thread
From: Jon Smirl @ 2003-08-30 17:20 UTC (permalink / raw)
To: fb-devel
--- Ian Romanick <idr@us.ibm.com> wrote:
> From: Ian Romanick <idr@us.ibm.com>
> To: "DRI developer's list" <dri-devel@lists.sourceforge.net>
> Subject: [Dri-devel] Proposed DRI driver interface changes (all people
> interested in pbuffers
> please read!)
> Date: Thu, 28 Aug 2003 12:44:18 -0700
>
> I know that a lot of people in the community are very interested in
> seeing pbuffer support in DRI drivers. I've been quick to point out
> that pbuffers require fbconfigs. I've also been working to figure out
> how to enable fbconfig support in client-side drivers. For stand-alone
> drivers this isn't a difficult task, but for drivers used with XFree86
> there are a number of issues. The remainder of this message is
> basically divided into three parts. In the first part I describe what
> the problems are, and in the second part I propose some solutions. The
> solutions that I propose involve deprecating some fundamental DRI
> interfaces (i.e., __driCreateScreen) and replacing them with updated
> interfaces. In the third section I propose how backwards compatibility
> could be maintained with the new interfaces.
>
> What are the problems?
> ======================
>
> fbconfigs provide a "new" way for applications to describe the
> parameters that are required of a context and a drawable. fbconfigs are
> extendible in that new extensions, such as GLX_OML_swap_method, can add
> new attributes to an fbconfig. Additional client / server protocol is
> also defined. Unlike GLX visuals, fbconfigs can also describe
> off-screen rendering targets. It is this element that makes fbconfigs a
> prerequisite for pbuffers.
>
> fbconfigs are used for creating new rendering contexts (via
> glXCreateNewContext or glXCreateContextWithConfigSGIX). Just like when
> a context is created using a GLX visual, a context can be created as
> direct or indirect. Drawables are also created using fbconfigs (via
> glXCreateWindow, glXCreatePixmap, glXCreatePbuffer, etc.). When a GLX
> drawable is created it is not know if it will be bound to a direct
> context or an indirect context. In fact, a given drawable could be
> bound to both types of context at different times in its lifetime.
>
> Because drawables can be bound to any type of context at any time, the
> client and the server must agree on the set of available fbconfigs. In
> XFree86 this means that three drivers have to agree. The client-side
> DRI driver, the server-side DDX driver, and the server-side libGLcore.a
> "driver" have to agree on the set of available fbconfigs. The
> difficulty in this is compounded by the fact that all three of these
> drivers may differ in version. In the future when accelerated
> server-side rendering is supported it is quite likely that users will
> update their client-side driver without restarting X. This will result
> in direct rendering contexts having a more recent driver, which may
> support addition fbconfigs, than the server-side driver.
>
> My initial hope what that fbconfigs could be implemented completely on
> the client-side. That is clearly impossible.
>
> How can the problems be solved?
> ===============================
>
> Several of the interfaces between libGL and the client-side DRI driver
> need to be modified to support fbconfigs. As an added benefit, the new
> interfaces should be directly usable by the stand-alone drivers. The
> precursor is to modify __GLcontextModes to contain all of the fields,
> though with non-X specific datatypes, that are in __GLXFBConfigRec.
>
> The first proposed change is to deprecate __driCreateScreen and replace
> it with __driCreateNewScreen. There are two significant differences
> between the old function and the new. The old function was passed an
> array of GLX visuals, but the new function is passed a linked list of
> __GLconextModes. This is convenient because whenever a GLX visual is
> used by the client-side driver it is converted to a __GLcontextModes
> structure first. The list of __GLcontextModes contains only the modes
> that directly match X visuals. In the stand-alone driver this could be
> a small set of generic modes that match the current display mode.
>
> The other difference is that new modes are added to the list. The idea
> is that the driver adds new modes for the on-screen and off-screen
> fbconfigs that it can support. In the XFree86 environment, libGL would
> then create a new list that is the intersection of the client-side
> driver supplied list and the server-side driver supplied list. This
> subset is would be exposed to applications. It is expected that until
> server-side HW accelerated rendering is available, the server will
> export a very rich set of possible fbconfigs (i.e., every combination of
> buffer types & sizes that SW Mesa can support).
>
> fbconfig IDs are not assigned by client-side drivers, and the drivers
> should not care about the fbconfig ID values. This allows libGL to
> either use the server supplied fbconfig ID values in the XFree86
> environment or assigned arbitrary fbconfig ID values in the stand-alone
> environment.
>
> The specifics of how, when, and by whom memory for the __GLcontextModes
> structures are allocated and freed has not been finalized. My current
> thinking is that libGL should export constructor and destructor
> functions (via glXGetProcAddress of course). The client-side driver
> would allocate structures as needed and fill-in the correct values. The
> client-side drivers would check the internal API version to determine
> which fields were available. As new fields are added the constructor
> would fill in reasonable defaults to maintain backwards compatibility
> with older client-side drivers.
>
> The second major change is to deprecate createContext (in the
> __DRIscreenRec) and replace it with createNewContext. The only
> difference in interface is the XVisualInfo parameter is replaced with a
> __GLcontextModes parameter. This interface would be used by libGL for
> creating any context, whether the application used a GLX visual or an
> fbconfig. This is convenient because the first the thing createContext
> does in all the open-source drivers is convert the XVisualInfo into a
> __GLcontextModes structure!
>
> The final major change is to deprecate createDrawable (in the
> __DRIscreenRec), which is already unused, and replace it with
> createNewDrawable. Since the existing entry-point is not used, it may
> be possible to keep the same name and the same location in the
> structure. The new entry-point would look something like:
>
> void *(*createNewDrawable)(Display *dpy,
> __GLcontextModes *mode,
> GLXDrawable draw, __DRIdrawable *pdraw,
> int renderType, const int *attributes);
>
> The meaning of dpy, mode, draw, and pdraw should be obvious. renderType
> is one of GLX_WINDOW_BIT, GLX_PIXMAP_BIT, or GLX_PBUFFER_BIT. Initially
> only GLX_WINDOW_BIT will be supported. When DRI drivers are used on the
> server-side, GLX_PIXMAP_BIT will have to be supported, and when pbuffer
> support is added GLX_PBUFFER_BIT will have to be supported. attributes
> matches the attributes parameter of glXCreatePbuffer, glXCreateWindow,
> and glXCreatePixmap.
>
> How can backwards compatibility be maintained?
> ==============================================
>
> There are two parts of the backwards compatibility equation. There is
> backwards compatibility between a new libGL and an old client-side
> driver, and there is backwards compatibility between a new client-side
> driver and an old libGL. Both can be handled very reasonably.
>
> It should be trivial for libGL to dynamically select which interface to
> use. If the client-side driver does not export the __driCreateNewScreen
> symbol, then the old interface is used. This also means that libGL
> should ignore requests from the client-side driver to enable
> SGIX_fbconfig support. Without the new interface such support is
> impossible. This will prevent possible conflicts with closed-source
> drivers that are expecting a different libGL.
>
> In the client-side driver it should be possible to rip out all support
> for the old interfaces from the device specific code (i.e., the code in
> lib/GL/mesa/src/drv). The DRI utility code (in lib/GL/dri) could easily
> create wrappers for the old createContext interface and the old
> __driCreateScreen interface. The __driCreateScreen interface would
> simply convert the list of visuals to a list of __GLcontextModes and
> pass it to __driCreateNewScreen. The createContext wrapper would
> operate in a similar fashion.
>
> Where to now?
> =============
>
> I'd like to discuss some of these interfaces changes, but I hope that
> none of them are too controversial. The sooner we can agree on a set of
> changes, the sooner they can be put into action. My hope is that
> support for fbconfigs, at the very least, will be complete and well
> enough tested to make it into the next XFree86 release. Since no date
> (or version number AFAIK) has been set yet, our chances seem good.
>
>
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Dri-devel mailing list
> Dri-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/dri-devel
=====
Jon Smirl
jonsmirl@yahoo.com
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-08-30 17:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-08-30 17:20 Fwd: [Dri-devel] Proposed DRI driver interface changes (all people interested in pbuffers please read!) Jon Smirl
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).