Mesa 18.2.2 Release Notes / October 5, 2018
===========================================

Mesa 18.2.2 is a bug fix release which fixes bugs found since the 18.2.1
release.

Mesa 18.2.2 implements the OpenGL 4.5 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.5. OpenGL 4.5 is **only** available if requested at context creation.
Compatibility contexts may report a lower version depending on each
driver.

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

::

   SHA256: c51711168971957037cc7e3e19e8abe1ec6eeab9cf236d419a1e7728a41cac8a  mesa-18.2.2.tar.gz
   SHA256: c3ba82b12a89d3d9fed2bdd96b4702dbb7ab675034650a8b1b718320daf073c4  mesa-18.2.2.tar.xz

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

None

Bug fixes
---------

-  `Bug 104602 <https://bugs.freedesktop.org/show_bug.cgi?id=104602>`__
   - [apitrace] Graphical artifacts in Civilization VI on RX Vega
-  `Bug 104926 <https://bugs.freedesktop.org/show_bug.cgi?id=104926>`__
   - swrast: Mesa 17.3.3 produces: HW cursor for format 875713089 not
   supported
-  `Bug 107276 <https://bugs.freedesktop.org/show_bug.cgi?id=107276>`__
   - radv: OpBitfieldUExtract returns incorrect result when count is
   zero
-  `Bug 107786 <https://bugs.freedesktop.org/show_bug.cgi?id=107786>`__
   - [DXVK] MSAA reflections are broken in GTA V
-  `Bug 108024 <https://bugs.freedesktop.org/show_bug.cgi?id=108024>`__
   - [Debian Stretch]Fail to build because "xcb_randr_lease_t"

Changes
-------

Alex Deucher (1):

-  pci_ids: add new polaris pci id

Andres Rodriguez (1):

-  radv: only emit ZPASS_DONE for timestamp queries on gfx queues

Axel Davy (3):

-  st/nine: Clamp RCP when 0*inf!=0
-  st/nine: Avoid redundant SetCursorPos calls
-  st/nine: Increase maximum number of temp registers

Dylan Baker (1):

-  meson: Don't compile pipe loader with dri support when not using dri

Eric Anholt (1):

-  vc4: Fix sin(0.0) and cos(0.0) accuracy to fix SDL rendering
   rotation.

Eric Engestrom (1):

-  vulkan/wsi/display: check if wsi_swapchain_init() succeeded

Jason Ekstrand (1):

-  anv,radv: Implement vkAcquireNextImage2

Juan A. Suarez Romero (2):

-  docs: add sha256 checksums for 18.2.1
-  Update version to 18.2.2

Leo Liu (1):

-  radeon/uvd: use bitstream coded number for symbols of Huffman tables

Marek Olšák (2):

-  glsl_to_tgsi: invert gl_SamplePosition.y for the default framebuffer
-  radeonsi: NaN should pass kill_if

Maxime (1):

-  vulkan: Disable randr lease for libxcb < 1.13

Michal Srb (1):

-  st/dri: don't set queryDmaBufFormats/queryDmaBufModifiers if the
   driver does not implement it

Rhys Perry (2):

-  nvc0: Update counter reading shaders to new NVC0_CB_AUX_MP_INFO
-  nvc0: fix bindless multisampled images on Maxwell+

Samuel Iglesias Gonsálvez (1):

-  anv: Add support for protected memory properties on
   anv_GetPhysicalDeviceProperties2()

Samuel Pitoiset (1):

-  radv: use the resolve compute path if dest uses multiple layers

Stuart Young (1):

-  docs: Update FAQ with respect to s3tc support

Timothy Arceri (1):

-  radeonsi: add a workaround for bitfield_extract when count is 0
