@@ -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+
7494static 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