Skip to content

Commit 5058a93

Browse files
committed
GPU (Linux): use renderDN instead of cardN when detecting AMD cards
Ref: #1284 (comment)
1 parent d6eff93 commit 5058a93

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

src/detection/gpu/gpu_linux.c

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,30 @@ static bool pciDetectDriver(FFstrbuf* result, FFstrbuf* pciDir, FFstrbuf* buffer
7171
return true;
7272
}
7373

74+
static const char* drmFindRenderFromCard(const char* drmCardKey, FFstrbuf* result)
75+
{
76+
char path[PATH_MAX];
77+
sprintf(path, "/sys/class/drm/%s/device/drm", drmCardKey);
78+
FF_AUTO_CLOSE_DIR DIR* dirp = opendir(path);
79+
if (!dirp) return "Failed to open `/sys/class/drm/{drmCardKey}/device/drm`";
80+
81+
struct dirent* entry;
82+
while ((entry = readdir(dirp)) != NULL)
83+
{
84+
if (ffStrStartsWith(entry->d_name, "render"))
85+
{
86+
ffStrbufSetS(result, "/dev/dri/");
87+
ffStrbufAppendS(result, entry->d_name);
88+
return NULL;
89+
}
90+
}
91+
return "Failed to find render device";
92+
}
93+
7494
static const char* drmDetectAmdSpecific(const FFGPUOptions* options, FFGPUResult* gpu, const char* drmKey, FFstrbuf* buffer)
7595
{
7696
#if FF_HAVE_DRM_AMDGPU
97+
7798
FF_LIBRARY_LOAD(libdrm, "dlopen libdrm_amdgpu" FF_LIBRARY_EXTENSION " failed", "libdrm_amdgpu" FF_LIBRARY_EXTENSION, 1)
7899
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libdrm, amdgpu_device_initialize)
79100
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libdrm, amdgpu_get_marketing_name)
@@ -82,8 +103,10 @@ static const char* drmDetectAmdSpecific(const FFGPUOptions* options, FFGPUResult
82103
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libdrm, amdgpu_query_heap_info)
83104
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libdrm, amdgpu_device_deinitialize)
84105

85-
ffStrbufSetS(buffer, "/dev/dri/");
86-
ffStrbufAppendS(buffer, drmKey);
106+
{
107+
const char* error = drmFindRenderFromCard(drmKey, buffer);
108+
if (error) return error;
109+
}
87110
FF_AUTO_CLOSE_FD int fd = open(buffer->chars, O_RDONLY);
88111
if (fd < 0) return "Failed to open DRM device";
89112

0 commit comments

Comments
 (0)