Mesa 11.0.6 Release Notes / November 21, 2015
=============================================

Mesa 11.0.6 is a bug fix release which fixes bugs found since the 11.0.5
release.

Mesa 11.0.6 implements the OpenGL 4.1 API, but the version reported by
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being
used. Some drivers don't support all the features required in OpenGL
4.1. OpenGL 4.1 is **only** available if requested at context creation
because compatibility contexts are not supported.

SHA256 checksums
----------------

::

   4bdf054af66ebabf3eca0616f9f5e44c2f234695661b570261c391bc2f4f7482  mesa-11.0.6.tar.gz
   8340e64cdc91999840404c211496f3de38e7b4cb38db34e2f72f1642c5134760  mesa-11.0.6.tar.xz

New features
------------

None

Bug fixes
---------

This list is likely incomplete.

-  `Bug 91780 <https://bugs.freedesktop.org/show_bug.cgi?id=91780>`__ -
   Rendering issues with geometry shader
-  `Bug 92588 <https://bugs.freedesktop.org/show_bug.cgi?id=92588>`__ -
   [HSW,BDW,BSW,SKL-Y][GLES 3.1 CTS]
   ES31-CTS.arrays_of_arrays.InteractionFunctionCalls2 - assert
-  `Bug 92738 <https://bugs.freedesktop.org/show_bug.cgi?id=92738>`__ -
   Randon R7 240 doesn't work on 16KiB page size platform
-  `Bug 92860 <https://bugs.freedesktop.org/show_bug.cgi?id=92860>`__ -
   [radeonsi][bisected] st/mesa: implement ARB_copy_image - Corruption
   in ARK Survival Evolved
-  `Bug 92900 <https://bugs.freedesktop.org/show_bug.cgi?id=92900>`__ -
   [regression bisected] About 700 piglit regressions is what could go
   wrong

Changes
-------

Alex Deucher (1):

-  radeonsi: enable optimal raster config setting for fiji (v2)

Ben Widawsky (1):

-  i965/skl/gt4: Fix URB programming restriction.

Boyuan Zhang (2):

-  st/vaapi: fix vaapi VC-1 simple/main corruption v2
-  radeon/uvd: fix VC-1 simple/main profile decode v2

Dave Airlie (1):

-  r600: initialised PGM_RESOURCES_2 for ES/GS

Emil Velikov (4):

-  docs: add sha256 checksums for 11.0.5
-  cherry-ignore: add the swrast front buffer support
-  automake: use static llvm for make distcheck
-  Update version to 11.0.6

Eric Anholt (3):

-  vc4: Return GL_OUT_OF_MEMORY when buffer allocation fails.
-  vc4: Return NULL when we can't make our shadow for a sampler view.
-  vc4: Add support for nir_op_uge, using the carry bit on QPU_A_SUB.

Ian Romanick (2):

-  meta/generate_mipmap: Don't leak the sampler object
-  meta/generate_mipmap: Only modify the draw framebuffer binding in
   fallback_required

Ilia Mirkin (2):

-  mesa/copyimage: allow width/height to not be multiples of block
-  nouveau: don't expose HEVC decoding support

Jason Ekstrand (1):

-  nir/vars_to_ssa: Rework copy set handling in
   lower_copies_to_load_store

Kenneth Graunke (1):

-  glsl: Allow implicit int -> uint conversions for the % operator.

Marek Olšák (1):

-  radeonsi: initialize SX_PS_DOWNCONVERT to 0 on Stoney

Michel Dänzer (1):

-  winsys/radeon: Use CPU page size instead of hardcoding 4096 bytes v3

Oded Gabbay (1):

-  llvmpipe: use simple coeffs calc for 128bit vectors

Roland Scheidegger (2):

-  radeon: fix bgrx8/xrgb8 blits
-  r200: fix bgrx8/xrgb8 blits
