glamor
Open-source X.org graphics common driver based on GL library.

What is glamor
------------------------

The glamor module is an open-source 2D graphics common driver for
the X Window System as implemented by X.org. It supports a variety of
graphics chipsets which have OpenGL/EGL/GBM supports.

It’s a GL-based rendering acceleration library for X server only:

	It uses normal texture to represent a drawable pixmap 
	if possible.
	It calls GL functions to render to the texture directly.

It consists of two packages:

	glamor : Rendering library. All the rendering functions
		 are implemented in this package. 
	glamor-egl : EGL support library. This package provides 
		     functions to create and initialize OpenGL/EGL context.  


It’s somehow hardware independent. And could be a building
block of any X server’s DDX driver:

        Xorg’s DDX driver could leverage glamor-egl package to 
	create an egl context without any native X system. This 
	package can support every platform which has OpenGL and 
	gbm and drm libraries.
	Now the xf86-video-intel driver uses glamor as one of its
	option. When you build it with --enable-glamor, then it
	will use glamor as its rendering engine.

Why glamor
----------------------------------------------
Basiclly, two intentions come to my mind of why we want to 
develop glamor.

1. Graphic device has powerful 3D capability. To use 3D function 
to accelerate 2D rendering is possible and many drivers already 
do so.  OpenGL provides a more convenient and standard interface 
to leverage GFX device’s 3D power. It would be better to call 
OpenGL directly rather than manually write 3D pipeline control 
code for each different GFX device.   

2. We have heard of complains about why we need to develop two 
version drivers for a single graphic device for a long time. 
One is for mesa’s DRI driver and the other is for 2D DDX driver. 
One of glamor’s purpose is to eliminate the latter one. 

How glamor works
----------------------------------------------
One prerequisite is that Xorg’s upper layer never access a 
drawable directly. It always use low level DDX functions to 
handle rendering.

All DDX functions access those drawables through two methods:
First method is to use DRM to map the drawable to a virtual 
memory buffer, and then use  libfb to access it directly. 
In many cases, this way is the fallback path.
Second method is to setup appropriate 2D or 3D pipeline 
according to the rendering request. Normally, it will prepare 
a serial of hardware dependent command, and then upload the 
command to the GFX device through DRM interface.

Glamor just provides the third access method:
Each pixmap has a normal texture object. Bind the texture 
object to a frame buffer object.  Writing shaders according 
to the rendering type and then call GL functions to render 
to the texture directly.

Eventually, the DRI driver in the openGL implementation (mesa) 
will setup appropriate 2D or 3D pipeline to perform the rendering 
operation. Functionally, it should be functional identical to
the normal 2D driver.

Where to get more information about the driver
----------------------------------------------
Please submit bugs & patches to the Xorg bugzilla:

        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg

All questions regarding this software should be directed at the
glamor mailing list:

        http://lists.freedesktop.org/mailman/listinfo/glamor

The master development code repository can be found at:

        git://anongit.freedesktop.org/git/xorg/driver/glamor

        http://cgit.freedesktop.org/xorg/driver/glamor

For more information on the git code manager, see:

        http://wiki.x.org/wiki/GitPage

