diff options
-rw-r--r-- | include/defs.h | 3 | ||||
-rw-r--r-- | src/main.cpp | 10 | ||||
-rw-r--r-- | src/utils.c | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/include/defs.h b/include/defs.h index 473583c..d2d0572 100644 --- a/include/defs.h +++ b/include/defs.h @@ -1,6 +1,8 @@ #ifndef GSR_DEFS_H #define GSR_DEFS_H +#include <stdbool.h> + typedef enum { GSR_GPU_VENDOR_AMD, GSR_GPU_VENDOR_INTEL, @@ -10,6 +12,7 @@ typedef enum { typedef struct { gsr_gpu_vendor vendor; int gpu_version; /* 0 if unknown */ + bool is_known_broken_driver; } gsr_gpu_info; typedef enum { diff --git a/src/main.cpp b/src/main.cpp index 9ac958a..88eb536 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1843,6 +1843,11 @@ static void info_command() { _exit(22); } + if(egl.gpu_info.is_known_broken_driver) { + fprintf(stderr, "gsr error: recording is not supported on your device because your device has broken drivers\n"); + _exit(14); + } + egl.card_path[0] = '\0'; if(monitor_capture_use_drm(&egl, wayland)) { // TODO: Allow specifying another card, and in other places @@ -2758,6 +2763,11 @@ int main(int argc, char **argv) { _exit(1); } + if(egl.gpu_info.is_known_broken_driver) { + fprintf(stderr, "gsr error: recording is not supported on your device because your device has broken drivers\n"); + _exit(14); + } + bool very_old_gpu = false; if(egl.gpu_info.vendor == GSR_GPU_VENDOR_NVIDIA && egl.gpu_info.gpu_version != 0 && egl.gpu_info.gpu_version < 900) { diff --git a/src/utils.c b/src/utils.c index b73216a..84c8707 100644 --- a/src/utils.c +++ b/src/utils.c @@ -377,6 +377,7 @@ bool gl_get_gpu_info(gsr_egl *egl, gsr_gpu_info *info) { const unsigned char *gl_renderer = egl->glGetString(GL_RENDERER); info->gpu_version = 0; + info->is_known_broken_driver = false; if(!gl_vendor) { fprintf(stderr, "gsr error: failed to get gpu vendor\n"); @@ -409,6 +410,7 @@ bool gl_get_gpu_info(gsr_egl *egl, gsr_gpu_info *info) { if(gl_renderer) { if(info->vendor == GSR_GPU_VENDOR_NVIDIA) sscanf((const char*)gl_renderer, "%*s %*s %*s %d", &info->gpu_version); + info->is_known_broken_driver = strstr((const char*)gl_renderer, "vangogh") != NULL; } end: |