diff --git a/src/runtime.c b/src/runtime.c
index 3a31f35376c5c4d0bbf0df8fc41ac8b57ccf74ff..e70bbc64596ac5bc118daa43072a8d900469aa77 100644
--- a/src/runtime.c
+++ b/src/runtime.c
@@ -1466,11 +1466,8 @@ pv_runtime_use_host_graphics_stack (PvRuntime *self,
               g_assert (details->resolved_library != NULL);
               g_assert (g_path_is_absolute (details->resolved_library));
 
-              /* We don't reuse the same IcdDetails for different multiarch.
-               * So we pass zero as the multiarch_index parameter to always fill
-               * just the first element in the array. */
               if (!bind_icd (self,
-                             0,
+                             arch->multiarch_index,
                              j,
                              arch->capsule_capture_libs,
                              arch->libdir_on_host,
@@ -1957,22 +1954,29 @@ pv_runtime_use_host_graphics_stack (PvRuntime *self,
         }
     }
 
-  for (i = 0; i < va_api_icd_details->len; i++)
+  for (j = 0; j < va_api_icd_details->len; j++)
     {
-      IcdDetails *details = g_ptr_array_index (va_api_icd_details, i);
-
-      G_STATIC_ASSERT (G_N_ELEMENTS (details->kinds) > 1);
-      G_STATIC_ASSERT (G_N_ELEMENTS (details->paths_in_container) > 1);
-      /* We add entries in va_api_icd_details only after a successful bind,
-       * so we expect to always have ICD_KIND_ABSOLUTE.
-       * Also we use IcdDetails for a single multiarch always added as the first element.
-       * Because of that we expect the second element to be NONEXISTENT. */
-      g_assert (details->kinds[0] == ICD_KIND_ABSOLUTE);
-      g_assert (details->kinds[1] == ICD_KIND_NONEXISTENT);
-      g_assert (details->paths_in_container[1] == NULL);
-
-      g_autofree gchar *va_api_binded_path = g_path_get_dirname (details->paths_in_container[0]);
-      pv_search_path_append (va_api_path, va_api_binded_path);
+      IcdDetails *details = g_ptr_array_index (va_api_icd_details, j);
+
+      for (i = 0; i < G_N_ELEMENTS (multiarch_tuples) - 1; i++)
+        {
+          g_assert (i < G_N_ELEMENTS (details->kinds));
+          g_assert (i < G_N_ELEMENTS (details->paths_in_container));
+
+          if (details->kinds[i] == ICD_KIND_NONEXISTENT)
+            {
+              continue;
+            }
+          else
+            {
+              g_autofree gchar *parent = NULL;
+
+              g_assert (details->kinds[i] == ICD_KIND_ABSOLUTE);
+
+              parent = g_path_get_dirname (details->paths_in_container[i]);
+              pv_search_path_append (va_api_path, parent);
+            }
+        }
     }
 
   if (dri_path->len != 0)