From a7d8fe17ca9bfc3d11b7a46f84c142990cb40c6f Mon Sep 17 00:00:00 2001
From: Bernd Machenschalk <bernd.machenschalk@aei.mpg.de>
Date: Fri, 9 Aug 2024 12:58:13 +0200
Subject: [PATCH] (OpenCL) API: add support for Apple GPU

---
 api/boinc_opencl.cpp | 4 ++++
 lib/coproc.cpp       | 3 +++
 lib/coproc.h         | 4 +++-
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/api/boinc_opencl.cpp b/api/boinc_opencl.cpp
index f31b73d094..976fff33ae 100644
--- a/api/boinc_opencl.cpp
+++ b/api/boinc_opencl.cpp
@@ -75,6 +75,10 @@ int get_vendor(cl_device_id device_id, char* vendor, int len) {
         strlcpy(vendor, GPU_TYPE_INTEL, len);     // "intel_gpu"
     }
 
+    if (strcasestr(vendor, "apple")) {
+        strlcpy(vendor, GPU_TYPE_APPLE, len);     // "intel_gpu"
+    }
+
     return 0;
 }
 
diff --git a/lib/coproc.cpp b/lib/coproc.cpp
index 083288c2c0..13f4516462 100644
--- a/lib/coproc.cpp
+++ b/lib/coproc.cpp
@@ -212,6 +212,7 @@ void COPROCS::summary_string(char* buf, int len) {
         if (type == PROC_TYPE_NVIDIA_GPU) continue;
         if (type == PROC_TYPE_AMD_GPU) continue;
         if (type == PROC_TYPE_INTEL_GPU) continue;
+        if (type == PROC_TYPE_APPLE_GPU) continue;
         if (!strlen(cp.opencl_prop.name)) continue;
         snprintf(buf2, sizeof(buf2),
             "[opencl_gpu|%s|%d|%dMB|%d]",
@@ -1020,6 +1021,7 @@ const char* proc_type_name_xml(int pt) {
     case PROC_TYPE_NVIDIA_GPU: return "NVIDIA";
     case PROC_TYPE_AMD_GPU: return "ATI";
     case PROC_TYPE_INTEL_GPU: return "intel_gpu";
+    case PROC_TYPE_APPLE_GPU: return "apple_gpu";
     case PROC_TYPE_MINER_ASIC: return "miner_asic";
     }
     return "unknown";
@@ -1031,6 +1033,7 @@ const char* proc_type_name(int pt) {
     case PROC_TYPE_NVIDIA_GPU: return "NVIDIA GPU";
     case PROC_TYPE_AMD_GPU: return "AMD/ATI GPU";
     case PROC_TYPE_INTEL_GPU: return "Intel GPU";
+    case PROC_TYPE_APPLE_GPU: return "Apple GPU";
     case PROC_TYPE_MINER_ASIC: return "Miner ASIC";
     }
     return "unknown";
diff --git a/lib/coproc.h b/lib/coproc.h
index f23db843de..c2abf441c6 100644
--- a/lib/coproc.h
+++ b/lib/coproc.h
@@ -107,7 +107,8 @@
 #define PROC_TYPE_AMD_GPU    2
 #define PROC_TYPE_INTEL_GPU  3
 #define PROC_TYPE_MINER_ASIC 4
-#define NPROC_TYPES          5
+#define PROC_TYPE_APPLE_GPU  5
+#define NPROC_TYPES          6
 
 extern const char* proc_type_name(int);
     // user-readable name
@@ -119,6 +120,7 @@ extern int coproc_type_name_to_num(const char* name);
 #define GPU_TYPE_NVIDIA proc_type_name_xml(PROC_TYPE_NVIDIA_GPU)
 #define GPU_TYPE_ATI proc_type_name_xml(PROC_TYPE_AMD_GPU)
 #define GPU_TYPE_INTEL proc_type_name_xml(PROC_TYPE_INTEL_GPU)
+#define GPU_TYPE_APPLE proc_type_name_xml(PROC_TYPE_APPLE_GPU)
 
 // represents a requirement for a coproc.
 // This is a parsed version of the <coproc> elements in an <app_version>
-- 
GitLab