Mesa 13.0.2 Release Notes / November 28, 2016
=============================================

Mesa 13.0.2 is a bug fix release which fixes bugs found since the 13.0.1
release.

Mesa 13.0.2 implements the OpenGL 4.4 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.4. OpenGL 4.4 is **only** available if requested at context creation
because compatibility contexts are not supported.

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

::

   6014233a5db6032ab8de4881384871bbe029de684502707794ce7b3e6beec308  mesa-13.0.2.tar.gz
   a6ed622645f4ed61da418bf65adde5bcc4bb79023c36ba7d6b45b389da4416d5  mesa-13.0.2.tar.xz

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

None

Bug fixes
---------

-  `Bug 97321 <https://bugs.freedesktop.org/show_bug.cgi?id=97321>`__ -
   Query INFO_LOG_LENGTH for empty info log should return 0
-  `Bug 97420 <https://bugs.freedesktop.org/show_bug.cgi?id=97420>`__ -
   "#version 0" crashes glsl_compiler
-  `Bug 98632 <https://bugs.freedesktop.org/show_bug.cgi?id=98632>`__ -
   Fix build on Hurd without PATH_MAX

Changes
-------

Ben Widawsky (3):

-  i965: Add some APL and KBL SKU strings
-  i965: Reorder PCI ID list to match release order
-  i965/glk: Add basic Geminilake support

Dave Airlie (14):

-  radv: fix texturesamples to handle single sample case
-  wsi: fix VK_INCOMPLETE for vkGetSwapchainImagesKHR
-  radv: don't crash on null swapchain destroy.
-  ac/nir/llvm: fix channel in texture gather lowering code.
-  radv: make sure to flush input attachments correctly.
-  radv: fix image view creation for depth and stencil only
-  radv: spir-v allows texture size query with and without lod.
-  vulkan/wsi/x11: handle timeouts properly in next image acquire (v1.1)
-  vulkan/wsi: store present mode in swapchain base class
-  vulkan/wsi/x11: add support for IMMEDIATE present mode
-  radv: fix texel fetch offset with 2d arrays.
-  radv/si: fix optimal micro tile selection
-  radv/ac/llvm: shadow samplers only return one value.
-  radv: fix 3D clears with baseMiplevel

Eduardo Lima Mitev (2):

-  vulkan/wsi/x11: Fix behavior of vkGetPhysicalDeviceSurfaceFormatsKHR
-  vulkan/wsi/x11: Fix behavior of
   vkGetPhysicalDeviceSurfacePresentModesKHR

Emil Velikov (5):

-  docs: add sha256 checksums for 13.0.1
-  cherry-ignore: add reverted LLVM_LIBDIR patch
-  anv: fix enumeration of properties
-  radv: honour the number of properties available
-  Update version to 13.0.2

Eric Anholt (3):

-  vc4: Don't abort when a shader compile fails.
-  vc4: Clamp the shadow comparison value.
-  vc4: Fix register class handling of DDX/DDY arguments.

Gwan-gyeong Mun (2):

-  util/disk_cache: close a previously opened handle in disk_cache_put
   (v2)
-  anv: Fix unintentional integer overflow in anv_CreateDmaBufImageINTEL

Iago Toral Quiroga (1):

-  anv/format: handle unsupported formats properly

Ian Romanick (2):

-  glcpp: Handle '#version 0' and other invalid values
-  glsl: Parse 0 as a preprocessor INTCONSTANT

Jason Ekstrand (15):

-  anv/gen8: Stall when needed in Cmd(Set|Reset)Event
-  anv/wsi: Set the fence to signaled in AcquireNextImageKHR
-  anv: Rework fences
-  vulkan/wsi/wayland: Include pthread.h
-  vulkan/wsi/wayland: Clean up some error handling paths
-  vulkan/wsi: Report the correct min/maxImageCount
-  i965/gs: Allow primitive id to be a system value
-  anv: Handle null in all destructors
-  anv/fence: Handle ANV_FENCE_CREATE_SIGNALED_BIT
-  nir/spirv: Fix handling of gl_PrimitiveId
-  anv/blorp: Ignore clears for attachments first used as resolve
   destinations
-  anv: Implement a depth stall restriction on gen7
-  anv/cmd_buffer: Handle running out of binding tables in compute
   shaders
-  anv/cmd_buffer: Emit a CS stall before setting a CS pipeline
-  vulkan/wsi/x11: Implement FIFO mode.

Jordan Justen (2):

-  isl: Fix height calculation in isl_msaa_interleaved_scale_px_to_sa
-  i965/hsw: Set integer mode in sampling state for stencil texturing

Kenneth Graunke (4):

-  intel: Set min_ds_entries on Broxton.
-  i965: Fix compute shader crash.
-  mesa: Drop PATH_MAX usage.
-  i965: Fix GS push inputs with enhanced layouts.

Kevin Strasser (1):

-  vulkan/wsi: Add a thread-safe queue implementation

Lionel Landwerlin (1):

-  anv: fix multi level clears with VK_REMAINING_MIP_LEVELS

Lucas Stach (1):

-  gbm: request correct version of the DRI2_FENCE extension

Nicolai Hähnle (2):

-  radeonsi: store group_size_variable in struct si_compute
-  glsl/lower_output_reads: fix geometry shader output handling with
   conditional emit

Steinar H. Gunderson (1):

-  Fix races during \_mesa_HashWalk().

Tapani Pälli (1):

-  mesa: fix empty program log length
