diff --git a/spack/packages/mesa/package.py b/spack/packages/mesa/package.py
index dafac166c6b390590d4cf469cc9bc7a272cf325e..d39c61f519fbf04c62b1204af1182f5cb978ffad 100644
--- a/spack/packages/mesa/package.py
+++ b/spack/packages/mesa/package.py
@@ -3,10 +3,10 @@
 #
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
-from spack import *
-
 import sys
 
+from spack import *
+
 
 class Mesa(MesonPackage):
     """Mesa is an open-source implementation of the OpenGL specification
@@ -19,6 +19,7 @@ class Mesa(MesonPackage):
     url = "https://archive.mesa3d.org/mesa-20.2.1.tar.xz"
 
     version('master', tag='master')
+    version('21.0.3', sha256='565c6f4bd2d5747b919454fc1d439963024fc78ca56fd05158c3b2cde2f6912b')
     version('21.0.0', sha256='e6204e98e6a8d77cf9dc5d34f99dd8e3ef7144f3601c808ca0dd26ba522e0d84')
     version('20.3.4', sha256='dc21a987ec1ff45b278fe4b1419b1719f1968debbb80221480e44180849b4084')
     version('20.2.1', sha256='d1a46d9a3f291bc0e0374600bdcb59844fa3eafaa50398e472a36fc65fd0244a')
@@ -26,7 +27,6 @@ class Mesa(MesonPackage):
     depends_on('meson@0.52:', type='build')
 
     depends_on('pkgconfig', type='build')
-    depends_on('binutils', when=(sys.platform != 'darwin'), type='build')
     depends_on('bison', type='build')
     depends_on('cmake', type='build')
     depends_on('flex', type='build')
@@ -92,6 +92,9 @@ class Mesa(MesonPackage):
     # OpenGL ES requires OpenGL
     conflicts('~opengl +opengles')
 
+    # requires native to be added to llvm_modules when using gallium swrast
+    patch('https://cgit.freedesktop.org/mesa/mesa/patch/meson.build?id=054dd668a69acc70d47c73abe4646e96a1f23577', sha256='36096a178070e40217945e12d542dfe80016cb897284a01114d616656c577d73', when='@21.0.0:21.0.3')
+
     # 'auto' needed when shared llvm is built
     @when('^llvm~shared_libs')
     def patch(self):
@@ -123,13 +126,17 @@ class Mesa(MesonPackage):
             args.append('-Dlibunwind=disabled')
 
         num_frontends = 0
+
+        if spec.satisfies('@:20.3'):
+            osmesa_enable, osmesa_disable = ('gallium', 'none')
+        else:
+            osmesa_enable, osmesa_disable = ('true', 'false')
+
         if '+osmesa' in spec:
             num_frontends += 1
-            args.append('-Dosmesa=gallium')
+            args.append('-Dosmesa={0}'.format(osmesa_enable))
         else:
-            #S. Joosten --> this line does not work in latest container
-            #args.append('-Dosmesa=none')
-            args.append('-Dosmesa=false')
+            args.append('-Dosmesa={0}'.format(osmesa_disable))
 
         if '+glx' in spec:
             num_frontends += 1