Attempt to make active card detection more robust
This commit is contained in:
		
							parent
							
								
									f38ed36271
								
							
						
					
					
						commit
						d6d17e55e0
					
				
							
								
								
									
										32
									
								
								src/utils.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								src/utils.c
									
									
									
									
									
								
							| @ -4,8 +4,9 @@ | ||||
| #include <string.h> | ||||
| #include <stdio.h> | ||||
| #include <unistd.h> | ||||
| #include <xf86drmMode.h> | ||||
| #include <fcntl.h> | ||||
| #include <xf86drmMode.h> | ||||
| #include <xf86drm.h> | ||||
| 
 | ||||
| double clock_get_monotonic_seconds(void) { | ||||
|     struct timespec ts; | ||||
| @ -115,15 +116,32 @@ bool gsr_get_valid_card_path(char *output) { | ||||
|         if(fd == -1) | ||||
|             continue; | ||||
| 
 | ||||
|         bool is_display_card = false; | ||||
|         drmModeResPtr resources = drmModeGetResources(fd); | ||||
|         if(resources) { | ||||
|             is_display_card = true; | ||||
|             drmModeFreeResources(resources); | ||||
|         drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); | ||||
| 
 | ||||
|         drmModePlaneResPtr planes = drmModeGetPlaneResources(fd); | ||||
|         if(!planes) { | ||||
|             close(fd); | ||||
|             continue; | ||||
|         } | ||||
| 
 | ||||
|         bool found_screen_card = false; | ||||
|         for(uint32_t i = 0; i < planes->count_planes; ++i) { | ||||
|             drmModePlanePtr plane = drmModeGetPlane(fd, planes->planes[i]); | ||||
|             if(!plane) | ||||
|                 continue; | ||||
| 
 | ||||
|             if(plane->fb_id) | ||||
|                 found_screen_card = true; | ||||
| 
 | ||||
|             drmModeFreePlane(plane); | ||||
| 
 | ||||
|             if(found_screen_card) | ||||
|                 break; | ||||
|         } | ||||
| 
 | ||||
|         close(fd); | ||||
| 
 | ||||
|         if(is_display_card) | ||||
|         if(found_screen_card) | ||||
|             return true; | ||||
|     } | ||||
|     return false; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 dec05eba
						dec05eba