pattern: limit max blur size
gl:  setting scratch surface for shadow differently

setting width and height of the shadow scratch surface differently instead
of using same size can sometime save memory, but at risk of re-generating
it
shadow: limit max blur
gl: set max scratch size to 1024

when blur radius is small and the image is big, use small scratch reduces
blurred image quality
shadow: compute accurate bounding for stroke

When line join in stroke is CAIRO_LINE_JOIN_MITER, compute approximate
bounding box is vastly over estimated.  This over estimate result in much
bigger surface required for scratch shadow surface.
gl: delete msaa renderbuffer when deleting gl surface
gl: make image conversion during image upload

in GLES2 backend, only GL_RGBA and GL_ALPHA are supported texture formats.
Convert images to either rgba or a8 formats when upload images.
gl: add support for OpenGL ES 3.0

configure with --enable-glesv3=yes to enable glesv3 supports.

There is a pecularity of opengl es 3.0.  glesv3 supports creating
multi-sampled renderbuffer and supports blitting from multisampled
renderbuffer to single sample texture only (not other way around).

In this implementation, glesv3 backends always create a renderbuffer.
This renderbuffer can be single sample (if num of samples <= 1) or
multisampled renderbuffers.  All renderings are always on this renderbuffer.
Only when the surface is used as source or mask, then the renderbuffer
content is blitted to the texture.

When an image is uploaded to a texture, it stays in the texture, until
when the surface is used as rendering target, at which time, the texture
is painted to the renderbuffer.

I know this is a little inefficient for drivers that only can have
single-sampled renderbuffer, but this makes the implementation much
simpler.

GLESV3 also supports PBO, like PBO in GL, we have not implemented PBO for
image uploading yet.
gl/msaa: compute smaller bounding box for paint and mask

compute bounding box based on source, clip and mask extents can
reduce number of pixels filling.  this is fast path for OVER
operator
shadow: reduce cached surface size

We can reduce cached shadow surface size by half to allow more caching
gl: Do not blit stencil buffer for glesv3 surface

For glesv3 surface, there is no need to blut stencil buffer from
multisample renderbuffer to texture, because texture is never a
rendering target
gl: Export query for EGLContext and EGLDisplay from device

Similar to glx, add query for the EGLContext and EGLDisplay to egl-based
cairo devices.
gl: use cairo_bool_t instead of bool
shadow:  compute exact bounding box for offset shadow

Instead of using imprecise _cairo_get_extents () for path, stroke pattern,
we must compute exact extents using cairo_rectangle_t.  This allows
us to save the cached shadow surface with precise scale and offset.
gl: remove glDrawBuffer and glReadBuffer for glesv3

There is no need to all these call once glBindFramebuffer is called
gl: add GLESv2 support for ANGLE extension for multisampling

add support GL_ANGLE_blit_framebuffer and GL_ANGLE_multisample_framebuffer.
These two extensions are similar to what is available in GLESv2, so the
cairo implementation is also similar.  Basically, we always create
renderbuffer as rendering target regardless of whether the renderbuffer
is multisampling or not.  When the surface is used as mask or source,
we blit the content in renderbuffer to texture.
gl: fix map_to_image() for glesv3 and GL_ANGLE extensions
gl: fix few issues in can_use_msaa

For glesv2 and glesv3, surface->support_msaa is almost always true,
except for glesv2 with GL_EXT/IMG_multisample_render_to_texture.  So
checking support_msaa is not enough, we also need to check num_samples.
gl: remove extra dispatch entry for glRenderbufferStorageMultisample
gl:  use the same rendering patch for gl, glesv3 and ANGLE extension

For glesv2 with GL_ANGLE_framebuffer_blit and
GL_ANGLE_framebuffer_multisample, glesv3, we use the same rendering
path as GL.