cuda: Fix lowest targetted architecture for CUDA >= 11.0
authorEdward Hervey <edward@centricular.com>
Wed, 25 Nov 2020 16:59:54 +0000 (17:59 +0100)
committerEdward Hervey <bilboed@bilboed.com>
Thu, 3 Dec 2020 11:23:44 +0000 (12:23 +0100)
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1469

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1835>

sys/nvcodec/gstcudanvrtc.c

index 0d90de2..39c15be 100644 (file)
@@ -44,9 +44,11 @@ gst_cuda_nvrtc_compile (const gchar * source)
 {
   nvrtcProgram prog;
   nvrtcResult ret;
+  CUresult curet;
   const gchar *opts[] = { "--gpu-architecture=compute_30" };
   gsize ptx_size;
   gchar *ptx = NULL;
+  int driverVersion;
 
   g_return_val_if_fail (source != NULL, FALSE);
 
@@ -54,12 +56,25 @@ gst_cuda_nvrtc_compile (const gchar * source)
 
   GST_TRACE ("CUDA kernel source \n%s", source);
 
+  curet = CuDriverGetVersion (&driverVersion);
+  if (curet != CUDA_SUCCESS) {
+    GST_ERROR ("Failed to query CUDA Driver version, ret %d", curet);
+    return NULL;
+  }
+
+  GST_DEBUG ("CUDA Driver Version %d.%d", driverVersion / 1000,
+      (driverVersion % 1000) / 10);
+
   ret = NvrtcCreateProgram (&prog, source, NULL, 0, NULL, NULL);
   if (ret != NVRTC_SUCCESS) {
     GST_ERROR ("couldn't create nvrtc program, ret %d", ret);
     return NULL;
   }
 
+  /* Starting from CUDA 11, the lowest supported architecture is 5.2 */
+  if (driverVersion >= 11000)
+    opts[0] = "--gpu-architecture=compute_52";
+
   ret = NvrtcCompileProgram (prog, 1, opts);
   if (ret != NVRTC_SUCCESS) {
     gsize log_size;