diff --git a/0001-Revert-glx-Guard-usage-of-infer_zink-explicit_zink-i.patch b/0001-Revert-glx-Guard-usage-of-infer_zink-explicit_zink-i.patch
deleted file mode 100644
index 4f661ae..0000000
--- a/0001-Revert-glx-Guard-usage-of-infer_zink-explicit_zink-i.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From a17c79c9df4a55ce9dfbe878d9cd19441a4e193e Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Thu, 10 Nov 2022 15:20:24 +1000
-Subject: [PATCH 1/2] Revert "glx: Guard usage of infer_zink && !explicit_zink
- in glxext.c"
-
-This reverts commit ffab4c8cb7bc7362cd3318f39162a98629bd4d19.
----
- src/glx/glxext.c | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/src/glx/glxext.c b/src/glx/glxext.c
-index 7f2fc2a0691..156bfc90946 100644
---- a/src/glx/glxext.c
-+++ b/src/glx/glxext.c
-@@ -969,7 +969,6 @@ __glXInitialize(Display * dpy)
- #endif
- 
-    if (!AllocAndFetchScreenConfigs(dpy, dpyPriv)) {
--#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
-       Bool fail = true;
-       /* if zink was inferred, retry without zink */
-       if (infer_zink && !explicit_zink) {
-@@ -981,10 +980,6 @@ __glXInitialize(Display * dpy)
-          free(dpyPriv);
-          return NULL;
-       }
--#else
--      free(dpyPriv);
--      return NULL;
--#endif
-    }
- 
-    __glX_send_client_info(dpyPriv);
--- 
-2.38.1
-
diff --git a/0001-st-mesa-suppress-async-glthread-flushing-for-GLX_EXT.patch b/0001-st-mesa-suppress-async-glthread-flushing-for-GLX_EXT.patch
new file mode 100644
index 0000000..af02b2c
--- /dev/null
+++ b/0001-st-mesa-suppress-async-glthread-flushing-for-GLX_EXT.patch
@@ -0,0 +1,41 @@
+From d871958702ebcd46213cd09b91b9b05685f9be62 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
+Date: Thu, 17 Nov 2022 08:31:33 -0500
+Subject: [PATCH] st/mesa: suppress async glthread flushing for
+ GLX_EXT_texture_from_pixmap
+
+This might fix some window system issues.
+
+Fixes: 3da170faaec - glthread: change when glFlush flushes asynchronously
+
+Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19809>
+---
+ src/mesa/state_tracker/st_manager.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
+index 0e8644f2b8d..575b72937c7 100644
+--- a/src/mesa/state_tracker/st_manager.c
++++ b/src/mesa/state_tracker/st_manager.c
+@@ -832,6 +832,9 @@ st_context_flush(struct st_context_iface *stctxi, unsigned flags,
+       st->gfx_shaders_may_be_dirty = true;
+ }
+ 
++/* This is only for GLX_EXT_texture_from_pixmap and equivalent features
++ * in EGL and WGL.
++ */
+ static bool
+ st_context_teximage(struct st_context_iface *stctxi,
+                     enum st_texture_type tex_type,
+@@ -915,6 +918,7 @@ st_context_teximage(struct st_context_iface *stctxi,
+    texObj->needs_validation = true;
+ 
+    _mesa_dirty_texobj(ctx, texObj);
++   ctx->Shared->HasExternallySharedImages = true;
+    _mesa_unlock_texture(ctx, texObj);
+ 
+    return true;
+-- 
+2.38.1
+
diff --git a/0002-Revert-egl-glx-add-fallback-for-zink-loading.patch b/0002-Revert-egl-glx-add-fallback-for-zink-loading.patch
deleted file mode 100644
index 2899031..0000000
--- a/0002-Revert-egl-glx-add-fallback-for-zink-loading.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From cb4d4c8e9c424969f2d7834e15fd8123dbbda84a Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Thu, 10 Nov 2022 15:27:08 +1000
-Subject: [PATCH 2/2] Revert "egl/glx: add fallback for zink loading"
-
-This reverts commit 2569215f43f6ce71fb8eb2181b36c6cf976bce2a.
-
-This break glxinfo in a swrast only VM for me on Fedora
----
- src/egl/main/eglapi.c | 22 ++++------------------
- src/glx/drisw_glx.c   |  5 ++++-
- src/glx/glxext.c      | 29 ++++++-----------------------
- 3 files changed, 14 insertions(+), 42 deletions(-)
-
-diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
-index 15f6e2e173b..041f35aa7b6 100644
---- a/src/egl/main/eglapi.c
-+++ b/src/egl/main/eglapi.c
-@@ -701,26 +701,12 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
-        * If the initialisation fails, try again using only software rendering.
-        */
-       if (!_eglDriver.Initialize(disp)) {
--         bool fail = true;
--         if (!disp->Options.ForceSoftware && !disp->Options.Zink &&
--             !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false) && !getenv("GALLIUM_DRIVER")) {
--            /* zink fallback */
--            disp->Options.Zink = EGL_TRUE;
-+         if (disp->Options.ForceSoftware)
-+            RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
-+         else {
-             disp->Options.ForceSoftware = EGL_TRUE;
--            fail = !_eglDriver.Initialize(disp);
--            if (fail) {
--               disp->Options.Zink = EGL_FALSE;
--               disp->Options.ForceSoftware = EGL_FALSE;
--            }
--         }
--         if (fail) {
--            if (disp->Options.ForceSoftware)
-+            if (!_eglDriver.Initialize(disp))
-                RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
--            else {
--               disp->Options.ForceSoftware = EGL_TRUE;
--               if (!_eglDriver.Initialize(disp))
--                  RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
--            }
-          }
-       }
- 
-diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
-index c124c62c31e..25d853fcd16 100644
---- a/src/glx/drisw_glx.c
-+++ b/src/glx/drisw_glx.c
-@@ -1054,8 +1054,11 @@ static struct glx_screen *
- driswCreateScreen(int screen, struct glx_display *priv)
- {
-    const struct drisw_display *pdpyp = (struct drisw_display *)priv->driswDisplay;
-+   if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) {
-+      return driswCreateScreenDriver(screen, priv, "zink");
-+   }
- 
--   return driswCreateScreenDriver(screen, priv, pdpyp->zink ? "zink" : "swrast");
-+    return driswCreateScreenDriver(screen, priv, "swrast");
- }
- 
- /* Called from __glXFreeDisplayPrivate.
-diff --git a/src/glx/glxext.c b/src/glx/glxext.c
-index 156bfc90946..e4da247b349 100644
---- a/src/glx/glxext.c
-+++ b/src/glx/glxext.c
-@@ -923,9 +923,9 @@ __glXInitialize(Display * dpy)
- #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
-    Bool glx_direct = !debug_get_bool_option("LIBGL_ALWAYS_INDIRECT", false);
-    Bool glx_accel = !debug_get_bool_option("LIBGL_ALWAYS_SOFTWARE", false);
-+   Bool zink;
-    const char *env = getenv("MESA_LOADER_DRIVER_OVERRIDE");
--   Bool explicit_zink = env && !strcmp(env, "zink");
--   Bool infer_zink = false;
-+   zink = env && !strcmp(env, "zink");
- 
-    dpyPriv->drawHash = __glxHashCreate();
- 
-@@ -940,25 +940,17 @@ __glXInitialize(Display * dpy)
-     ** (e.g., those called in AllocAndFetchScreenConfigs).
-     */
- #if defined(GLX_USE_DRM)
--   if (glx_direct && glx_accel && !explicit_zink) {
-+   if (glx_direct && glx_accel && !zink) {
- #if defined(HAVE_DRI3)
-       if (!debug_get_bool_option("LIBGL_DRI3_DISABLE", false))
-          dpyPriv->dri3Display = dri3_create_display(dpy);
- #endif /* HAVE_DRI3 */
-       if (!debug_get_bool_option("LIBGL_DRI2_DISABLE", false))
-          dpyPriv->dri2Display = dri2CreateDisplay(dpy);
--      /* zink fallback */
--      if (!dpyPriv->dri3Display && !dpyPriv->dri2Display)
--         infer_zink =  !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false) && !getenv("GALLIUM_DRIVER");
-    }
- #endif /* GLX_USE_DRM */
-    if (glx_direct)
--      dpyPriv->driswDisplay = driswCreateDisplay(dpy, explicit_zink | infer_zink);
--
--#ifdef GLX_USE_WINDOWSGL
--   if (glx_direct && glx_accel)
--      dpyPriv->windowsdriDisplay = driwindowsCreateDisplay(dpy);
--#endif
-+      dpyPriv->driswDisplay = driswCreateDisplay(dpy, zink);
- #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */
- 
- #ifdef GLX_USE_APPLEGL
-@@ -969,17 +961,8 @@ __glXInitialize(Display * dpy)
- #endif
- 
-    if (!AllocAndFetchScreenConfigs(dpy, dpyPriv)) {
--      Bool fail = true;
--      /* if zink was inferred, retry without zink */
--      if (infer_zink && !explicit_zink) {
--         free(dpyPriv->screens);
--         driswCreateDisplay(dpy, false);
--         fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv);
--      }
--      if (fail) {
--         free(dpyPriv);
--         return NULL;
--      }
-+      free(dpyPriv);
-+      return NULL;
-    }
- 
-    __glX_send_client_info(dpyPriv);
--- 
-2.38.1
-
diff --git a/mesa.spec b/mesa.spec
index da882ae..962a6a6 100644
--- a/mesa.spec
+++ b/mesa.spec
@@ -16,7 +16,7 @@
 %global with_crocus   1
 %global with_vmware 1
 %global with_xa     1
-%global platform_vulkan ,intel
+%global platform_vulkan ,intel,intel_hasvk
 %endif
 
 %ifarch %{arm} aarch64
@@ -52,7 +52,7 @@
 
 Name:           mesa
 Summary:        Mesa graphics libraries
-%global ver 22.3.0-rc2
+%global ver 22.3.0-rc3
 Version:        %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
 Release:        1%{?dist}
 License:        MIT
@@ -64,9 +64,7 @@ Source0:        https://mesa.freedesktop.org/archive/%{name}-%{ver}.tar.xz
 # Fedora opts to ignore the optional part of clause 2 and treat that code as 2 clause BSD.
 Source1:        Mesa-MLAA-License-Clarification-Email.txt
 
-# revert zink autoloader it breaks glxinfo in a VM
-Patch10:	0001-Revert-glx-Guard-usage-of-infer_zink-explicit_zink-i.patch
-Patch11:	0002-Revert-egl-glx-add-fallback-for-zink-loading.patch
+Patch10:	0001-st-mesa-suppress-async-glthread-flushing-for-GLX_EXT.patch
 
 BuildRequires:  meson >= 0.45
 BuildRequires:  gcc
@@ -591,6 +589,8 @@ popd
 %ifarch %{ix86} x86_64
 %{_libdir}/libvulkan_intel.so
 %{_datadir}/vulkan/icd.d/intel_icd.*.json
+%{_libdir}/libvulkan_intel_hasvk.so
+%{_datadir}/vulkan/icd.d/intel_hasvk_icd.*.json
 %endif
 %ifarch %{arm} aarch64
 %{_libdir}/libvulkan_broadcom.so
@@ -601,6 +601,9 @@ popd
 %endif
 
 %changelog
+* Wed Nov 23 2022 Dave Airlie <airlied@redhat.com> - 22.3.0~rc3.1
+- Update to mesa 22.3.0-rc3
+
 * Fri Nov 11 2022 Dave Airlie <airlied@redhat.com> - 22.3.0~rc2.1
 - Update to mesa 22.3.0-rc2
 
diff --git a/sources b/sources
index c8c6b75..c46f36e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (mesa-22.3.0-rc2.tar.xz) = dad41ba87b5f55c4e6f3478c348c14fc8b2b29beb87f20d99cedeeeb47bb787e2fe98570544cdb9bb06466fc3c61a43b9797d27e5f1b700c608ef539a5916fd4
+SHA512 (mesa-22.3.0-rc3.tar.xz) = 4f67a3343b82ccf2ba0ed085199da4ae69cd9c144c998ca2730eb133fe78d9ad86fe967138a58bdeba8e387876d1aac4e37494faadb4dc77ce7f44704cb39e6b