diff --git a/bin/system-info.c b/bin/system-info.c
index a6199a77c2b93e9ae81479cd356bce721ebaa4a0..171785a0a66c24809f5fe766ef4d9310ed81019a 100644
--- a/bin/system-info.c
+++ b/bin/system-info.c
@@ -488,14 +488,24 @@ print_va_api_details (JsonBuilder *builder,
     {
       for (iter = va_api_list; iter != NULL; iter = iter->next)
         {
+          const gchar *library;
+          gchar *resolved = NULL;
           json_builder_begin_object (builder);
+          library = srt_va_api_driver_get_library_path (iter->data);
           json_builder_set_member_name (builder, "library_path");
-          json_builder_add_string_value (builder, srt_va_api_driver_get_library_path (iter->data));
+          json_builder_add_string_value (builder, library);
+          resolved = srt_va_api_driver_resolve_library_path (iter->data);
+          if (g_strcmp0 (library, resolved) != 0)
+            {
+              json_builder_set_member_name (builder, "library_path_resolved");
+              json_builder_add_string_value (builder, resolved);
+            }
           if (srt_va_api_driver_is_extra (iter->data))
             {
               json_builder_set_member_name (builder, "is_extra");
               json_builder_add_boolean_value (builder, TRUE);
             }
+          g_free (resolved);
           json_builder_end_object (builder);
         }
     }
diff --git a/bin/system-info.md b/bin/system-info.md
index 9028725ffdffcdecfb1dad5be89ad2eb812d0c57..e95d24912982f3267aec8d8837d6d493ffc55935 100644
--- a/bin/system-info.md
+++ b/bin/system-info.md
@@ -466,6 +466,10 @@ keys:
         **library_path**
         :   Path to the driver module that has been found.
 
+        **library_path_resolved**
+        :   Absolute path to the driver module that has been found.
+            This key is present only if **library_path** is relative.
+
         **is_extra**
         :   A boolean value indicating whether the driver module is in an
             "unusual" location, probably not in the canonical search path.
diff --git a/steam-runtime-tools/graphics.c b/steam-runtime-tools/graphics.c
index f7ae403bd61dc95a6c43956cccd94544287b6b4c..3df5da69095bf3abf1c378b8bcf26029df114d77 100644
--- a/steam-runtime-tools/graphics.c
+++ b/steam-runtime-tools/graphics.c
@@ -3251,6 +3251,24 @@ _srt_list_graphics_modules (const char *sysroot,
   return g_list_reverse (drivers);
 }
 
+static gchar *
+_srt_resolve_library_path (const gchar *library_path)
+{
+  gchar *base;
+  gchar *ret;
+
+  g_return_val_if_fail (library_path != NULL, NULL);
+
+  /* We can't use g_canonicalize_filename() because we are targeting an earlier glib version */
+  if (library_path[0] == '/')
+    return g_strdup (library_path);
+
+  base = g_get_current_dir ();
+  ret = g_build_filename (base, library_path, NULL);
+  g_free (base);
+  return ret;
+}
+
 /**
  * SrtVaApiDriver:
  *
@@ -3276,6 +3294,7 @@ enum
   VA_API_DRIVER_PROP_0,
   VA_API_DRIVER_PROP_LIBRARY_PATH,
   VA_API_DRIVER_PROP_IS_EXTRA,
+  VA_API_DRIVER_PROP_RESOLVED_LIBRARY_PATH,
   N_VA_API_DRIVER_PROPERTIES
 };
 
@@ -3304,6 +3323,10 @@ srt_va_api_driver_get_property (GObject *object,
         g_value_set_boolean (value, self->is_extra);
         break;
 
+      case VA_API_DRIVER_PROP_RESOLVED_LIBRARY_PATH:
+        g_value_take_string (value, srt_va_api_driver_resolve_library_path (self));
+        break;
+
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -3356,7 +3379,9 @@ srt_va_api_driver_class_init (SrtVaApiDriverClass *cls)
 
   va_api_driver_properties[VA_API_DRIVER_PROP_LIBRARY_PATH] =
     g_param_spec_string ("library-path", "Library path",
-                         "Absolute path to the DRI driver library",
+                         "Path to the DRI driver library. It might be absolute "
+                         "(e.g. /usr/lib/dri/iHD_drv_video.so) or relative "
+                         "(e.g. custom/dri/iHD_drv_video.so)",
                          NULL,
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS);
@@ -3368,6 +3393,14 @@ srt_va_api_driver_class_init (SrtVaApiDriverClass *cls)
                           G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS);
 
+  va_api_driver_properties[VA_API_DRIVER_PROP_RESOLVED_LIBRARY_PATH] =
+    g_param_spec_string ("resolved-library-path", "Resolved library path",
+                         "Absolute path to the DRI driver library. This is similar "
+                         "to 'library-path', but is guaranteed to be an "
+                         "absolute path (e.g. /usr/lib/dri/iHD_drv_video.so)",
+                         NULL,
+                         G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
   g_object_class_install_properties (object_class, N_VA_API_DRIVER_PROPERTIES,
                                      va_api_driver_properties);
 }
@@ -3397,7 +3430,7 @@ srt_va_api_driver_new (const gchar *library_path,
  *
  * Return the library path for this VA-API driver.
  *
- * Returns: (type filename) (transfer none) (nullable): #SrtVaApiDriver:library-path
+ * Returns: (type filename) (transfer none): #SrtVaApiDriver:library-path
  */
 const gchar *
 srt_va_api_driver_get_library_path (SrtVaApiDriver *self)
@@ -3421,6 +3454,26 @@ srt_va_api_driver_is_extra (SrtVaApiDriver *self)
   return self->is_extra;
 }
 
+/**
+ * srt_va_api_driver_resolve_library_path:
+ * @self: The VA-API driver
+ *
+ * Return the absolute library path for this VA-API driver.
+ * If srt_va_api_driver_get_library_path() is already an absolute path, a copy
+ * of the same value will be returned.
+ *
+ * Returns: (type filename) (transfer full): A copy of
+ *  #SrtVaApiDriver:resolved-library-path. Free with g_free().
+ */
+gchar *
+srt_va_api_driver_resolve_library_path (SrtVaApiDriver *self)
+{
+  g_return_val_if_fail (SRT_IS_VA_API_DRIVER (self), NULL);
+  g_return_val_if_fail (self->library_path != NULL, NULL);
+
+  return _srt_resolve_library_path (self->library_path);
+}
+
 /**
  * SrtVdpauDriver:
  *
@@ -3658,20 +3711,10 @@ srt_vdpau_driver_is_extra (SrtVdpauDriver *self)
 gchar *
 srt_vdpau_driver_resolve_library_path (SrtVdpauDriver *self)
 {
-  gchar *base;
-  gchar *ret;
-
   g_return_val_if_fail (SRT_IS_VDPAU_DRIVER (self), NULL);
   g_return_val_if_fail (self->library_path != NULL, NULL);
 
-  /* We can't use g_canonicalize_filename() because we are targeting an earlier glib version */
-  if (self->library_path[0] == '/')
-    return g_strdup (self->library_path);
-
-  base = g_get_current_dir ();
-  ret = g_build_filename (base, self->library_path, NULL);
-  g_free (base);
-  return ret;
+  return _srt_resolve_library_path (self->library_path);
 }
 
 /**
diff --git a/steam-runtime-tools/graphics.h b/steam-runtime-tools/graphics.h
index 28be49e6faaf84b9e5cd4568d135ff59c4477233..4e7f2af850ff55ee11fa13523acc969a3eb37a86 100644
--- a/steam-runtime-tools/graphics.h
+++ b/steam-runtime-tools/graphics.h
@@ -182,6 +182,7 @@ GType srt_va_api_driver_get_type (void);
 
 const gchar *srt_va_api_driver_get_library_path (SrtVaApiDriver *self);
 gboolean srt_va_api_driver_is_extra (SrtVaApiDriver *self);
+gchar *srt_va_api_driver_resolve_library_path (SrtVaApiDriver *self);
 
 typedef struct _SrtVdpauDriver SrtVdpauDriver;
 typedef struct _SrtVdpauDriverClass SrtVdpauDriverClass;
diff --git a/tests/graphics.c b/tests/graphics.c
index 4ea295744ddc989d1885912a4063e8d876cf8d93..54eb80767dffb668a1c08c939015692581095080 100644
--- a/tests/graphics.c
+++ b/tests/graphics.c
@@ -1822,8 +1822,12 @@ check_paths_are_absolute (const GList *list,
             absolute_path = srt_vdpau_driver_resolve_library_path (iter->data);
             break;
 
-          case SRT_GRAPHICS_DRI_MODULE:
           case SRT_GRAPHICS_VAAPI_MODULE:
+            library_path = srt_va_api_driver_get_library_path (iter->data);
+            absolute_path = srt_va_api_driver_resolve_library_path (iter->data);
+            break;
+
+          case SRT_GRAPHICS_DRI_MODULE:
           case SRT_GRAPHICS_GLX_MODULE:
           case NUM_SRT_GRAPHICS_MODULES:
           default:
@@ -1852,8 +1856,12 @@ check_paths_are_relative (const GList *list,
             absolute_path = srt_vdpau_driver_resolve_library_path (iter->data);
             break;
 
-          case SRT_GRAPHICS_DRI_MODULE:
           case SRT_GRAPHICS_VAAPI_MODULE:
+            library_path = srt_va_api_driver_get_library_path (iter->data);
+            absolute_path = srt_va_api_driver_resolve_library_path (iter->data);
+            break;
+
+          case SRT_GRAPHICS_DRI_MODULE:
           case SRT_GRAPHICS_GLX_MODULE:
           case NUM_SRT_GRAPHICS_MODULES:
           default:
@@ -1916,10 +1924,12 @@ test_dri_debian10 (Fixture *f,
   /* The output is guaranteed to be in aphabetical order */
   va_api = srt_system_info_list_va_api_drivers (info, multiarch_tuples[0], SRT_DRIVER_FLAGS_NONE);
   check_list_suffixes (va_api, va_api_suffixes_i386, SRT_GRAPHICS_VAAPI_MODULE);
+  check_paths_are_absolute (va_api, SRT_GRAPHICS_VAAPI_MODULE);
   g_list_free_full (va_api, g_object_unref);
 
   va_api = srt_system_info_list_va_api_drivers (info, multiarch_tuples[1], SRT_DRIVER_FLAGS_NONE);
   check_list_suffixes (va_api, va_api_suffixes_x86_64, SRT_GRAPHICS_VAAPI_MODULE);
+  check_paths_are_absolute (va_api, SRT_GRAPHICS_VAAPI_MODULE);
   g_list_free_full (va_api, g_object_unref);
 
   /* Do it again, this time using the cached result.
@@ -2064,7 +2074,7 @@ test_dri_with_env (Fixture *f,
   libva3 = g_build_filename (sysroot, "custom_path64", "va", NULL);
 
   libgl_combined = g_strjoin (":", libgl, libgl2, libgl3, NULL);
-  libva_combined = g_strjoin (":", libva, libva2, libgl3, NULL);
+  libva_combined = g_strjoin (":", libva, libva2, libva3, NULL);
 
   envp = g_get_environ ();
   envp = g_environ_setenv (envp, "SRT_TEST_SYSROOT", sysroot, TRUE);
@@ -2099,6 +2109,22 @@ test_dri_with_env (Fixture *f,
   check_list_extra (va_api, G_N_ELEMENTS(va_api_suffixes)-1, SRT_GRAPHICS_VAAPI_MODULE);
   g_list_free_full (va_api, g_object_unref);
 
+  /* Test a va_api relative path */
+  g_free (libva);
+  g_free (libva2);
+  g_free (libva3);
+  g_free (libva_combined);
+  libva = g_build_filename ("sysroots", "no-os-release", "custom_path32", "va", NULL);
+  libva2 = g_build_filename ("sysroots", "no-os-release", "custom_path32_2", "va", NULL);
+  libva3 = g_build_filename ("sysroots", "no-os-release", "custom_path64", "va", NULL);
+  libva_combined = g_strjoin (":", libva, libva2, libva3, NULL);
+  envp = g_environ_setenv (envp, "LIBVA_DRIVERS_PATH", libva_combined, TRUE);
+  srt_system_info_set_environ (info, envp);
+  va_api = srt_system_info_list_va_api_drivers (info, multiarch_tuples[0], SRT_DRIVER_FLAGS_NONE);
+  check_list_suffixes (va_api, va_api_suffixes, SRT_GRAPHICS_VAAPI_MODULE);
+  check_paths_are_relative (va_api, SRT_GRAPHICS_VAAPI_MODULE);
+  g_list_free_full (va_api, g_object_unref);
+
   g_object_unref (info);
   g_free (sysroot);
   g_free (libgl_combined);
diff --git a/tests/mock-fedora-32-bit-inspect-library.c b/tests/mock-fedora-32-bit-inspect-library.c
index f79b89171d0c22acdd6e7dea2e96f6d9528c1734..d2162dc715f93ee13bd892cab5dafcbb231fd1d8 100644
--- a/tests/mock-fedora-32-bit-inspect-library.c
+++ b/tests/mock-fedora-32-bit-inspect-library.c
@@ -57,6 +57,10 @@ main (int argc,
         }
     }
 
+  /* If the argument is a 64bit directory, we return an exit failure */
+  if (g_strstr_len (argv[1], -1, "/custom_path64/") != NULL)
+    return EXIT_FAILURE;
+
   gchar **envp = g_get_environ ();
   gchar *path = g_build_filename (g_environ_getenv (envp, "SRT_TEST_SYSROOT"), "usr", "lib", argv[1], NULL);