-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Kristian Høgsberg wrote:
> Hi,
>
> I've been working on updating the DRI interface
> (GL/internal/dri_interface.h) the last few days and I though I'd post
> a heads up to the lists to get some feedback. The work I've been
> doing starts out with the patches in bug 5714, implements Ians
> suggestions in comment #20, and quite a bit more. I haven't added
> Alans frontbuffer mapping patches yet; I wanted to get this work done
> first before breaking DDX compatibility, but they're next.
>
> The work is on the dri2 branch in git.freedesktop.org/~krh/mesa.git or
> browsable here:
>
> http://people.freedesktop.org/krh-cgi/cgit?r=_home_krh_mesa.git&p=log&h=dri2
>
> The changes are mostly a series of cleanup as described below, but
> there is a new concept in there: the DRI extension. Much of the churn
> in the DRI interface structs is from adding and removing functions
> pertaining to GLX extensions, most recently GLX_MESA_copy_sub_buffer
> and probably soon GLX_EXT_texture_from_pixmap. The DRI extension
> mechanism should allow us to add and remove support for extensions as
> they come and go, in a way that doesn't break ABI or API.
>
> The idea here is that only the core GLX 1.4 features should be part of
> the __DRI{screen,context,drawable} structs and everything else must be
> exposed as a __DRIextension. The list of __DRIextensions is available
> using __DRIscreen::getExtensions;
>
> const __DRIextension **(*getExtensions)(__DRIscreen *screen);
>
> All extensions have a common "baseclass" that just is the name of the
> extension (just a string):
>
> struct __DRIextensionRec {
> const char *name;
> };
We've had a couple cases over the years where the interface for a
particular bit of functionality has changed. It might be worthwhile to
stick a version in here.
> If the name matches that of an extension known to the loader, the
> loader can cast the struct to a more specific extension struct that
> has the function pointers that provide access to the functionality.
> For example:
>
> #define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer"
> struct __DRIcopySubBufferExtensionRec {
> __DRIextension base;
> void (*copySubBuffer)(__DRIdrawable *drawable,
> int x, int y, int w, int h);
> };
>
> The presence of an extension means that the driver can provide some
> extra functionality. Based of these extra hooks, the loader will be
> able to implement and advertise a number of GLX extensions. The DRI
> extension name space is private to the DRI interface, and is
> orthogonal to the GLX extension name space. The logic here is that
> one DRI extension can enable a number of GLX extensions, and the
> loader, since it has to implement the entry points, will know exactly
> which GLX extensions to enable. For example, the DRI_SwapControl
> extension:
Is the implication that drivers won't have to explicitly enable GLX
extensions? I like that. Let the loader derive the information from
the information provided by the driver.
> #define __DRI_SWAP_CONTROL "DRI_SwapControl"
> struct __DRIswapControlExtensionRec {
> __DRIextension base;
> void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval);
> unsigned int (*getSwapInterval)(__DRIdrawable *drawable);
> };
>
> enables the loader to implement both GLX_SGI_swap_control and
> GLX_MESA_swap_control.
>
> Aside from the new extension mechanism, the branch cleans up a number
> of things in the DRI interface:
>
> 1) Move XIDs out of the interface and make libGL handle XID ->
> __DRIdrawable etc mapping. I've pulled the hashtable from libdrm into
> mesa to do this, which should allow us to drop the hashtable and the
> skip list from drm eventually.
>
> 2) Drop the display notion from the interface. A DRI driver only
> handles one screen and
>
> 3) Remove getProcAddress (only needed by the old extension mechanism),
Right...to get the function that enables GLX extensions.
> create/destroyContext, create/destroyDrawable (instead of calling back
> from the DRI driver, just have the loader create the context first and
> pass the drm_context_t into the driver).
I'll have to look at the code. I'm not 100% sure how this would play out.
> 4) Remove variables from the __DRI* structs except the private
> pointer. We should never share state across the DRI driver boundary,
> all access should go through functions.
How well is that working out in practice?
> 5) Misc cleanups: pull the createNewScreen out of the driver backends
> and into dri/common (more code sharing, simpler interface between
> dri/common and drivers), always use the __DRI* types instead of
> private void pointers (type safety, interface is more
> self-documenting), generate entry point name using macros instead of
> duplication the version number in a few places, drop now unused
> __DRIid typedef.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
iD8DBQFGTkaQX1gOwKyEAw8RAj8BAJ9bTYLzOUnF+wiJvC9u9zBYuoESrQCfXJIX
zDXqyCvFKbrAZR/KJA+9qRg=
=Z1uR
-----END PGP SIGNATURE-----
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel