X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=context.cpp;h=eb62183a3b3a8c9c7c9065f6d212a21b92e8257e;hb=7cd8d9079f89d091f3332de1cdfee46136d2d74f;hp=e181be7cecb644e39faa5071d61ebe9057a16190;hpb=c108212cf86f77df44d3a7fa92f12c9dcd592f7c;p=nageru diff --git a/context.cpp b/context.cpp index e181be7..eb62183 100644 --- a/context.cpp +++ b/context.cpp @@ -1,8 +1,4 @@ -#include #include -extern "C" { -#include -} #include @@ -17,77 +13,6 @@ bool using_egl = false; using namespace std; -namespace { - -string get_pci_device_name(const char *node_name) -{ - char vendor_path[256]; - snprintf(vendor_path, sizeof(vendor_path), "/sys/class/drm/%s/device/vendor", node_name); - FILE *vendor_file = fopen(vendor_path, "r"); - if (vendor_file == nullptr) { - return "could not look up vendor ID"; - } - int vendor; - if (fscanf(vendor_file, "%i", &vendor) != 1) { - fclose(vendor_file); - return "could not parse vendor ID"; - } - fclose(vendor_file); - - char device_path[256]; - snprintf(device_path, sizeof(device_path), "/sys/class/drm/%s/device/device", node_name); - FILE *device_file = fopen(device_path, "r"); - if (device_file == nullptr) { - return "could not look up device ID"; - } - int device; - if (fscanf(device_file, "%i", &device) != 1) { - fclose(device_file); - return "could not parse device ID"; - } - fclose(device_file); - - pci_access *pci = pci_alloc(); - if (pci == nullptr) { - return "could not init libpci"; - } - pci_init(pci); - - char buf[256]; - const char *name = pci_lookup_name(pci, buf, sizeof(buf), PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE, vendor, device); - pci_cleanup(pci); - - if (name == nullptr) { - snprintf(buf, sizeof(buf), "%04x:%04x", vendor, device); - } - return buf; -} - -void print_available_drm_nodes() -{ - glob_t g; - int err = glob("/dev/dri/renderD*", 0, nullptr, &g); // TODO: Accept /dev/dri/card*, too? - if (err != 0) { - fprintf(stderr, "Couldn't list render nodes (%s).\n", strerror(errno)); - return; - } - - if (g.gl_pathc == 0) { - fprintf(stderr, "\n"); - fprintf(stderr, "No render nodes found in /dev/dri.\n"); - } else { - fprintf(stderr, "Available devices (these may or may not support VA-API encoding):\n\n"); - for (size_t i = 0; i < g.gl_pathc; ++i) { - const char *node_name = basename(g.gl_pathv[i]); - fprintf(stderr, " %s (%s)\n", g.gl_pathv[i], get_pci_device_name(node_name).c_str()); - } - } - - globfree(&g); -} - -} // namespace - QSurface *create_surface(const QSurfaceFormat &format) { QOffscreenSurface *surface = new QOffscreenSurface; @@ -95,17 +20,6 @@ QSurface *create_surface(const QSurfaceFormat &format) surface->create(); if (!surface->isValid()) { fprintf(stderr, "ERROR: surface not valid!\n"); - if (using_egl) { - fprintf(stderr, "\n\n"); - fprintf(stderr, "OpenGL initialization failed. This is most likely because your driver does not\n"); - fprintf(stderr, "support EGL (e.g. NVIDIA drivers). You can turn off EGL by specifying the\n"); - fprintf(stderr, "VA-API path directly, assuming you have another GPU with VA-API support\n"); - fprintf(stderr, "(typically an integrated Intel GPU -- note that it you might need to manually\n"); - fprintf(stderr, "enable it in the BIOS, as it might be turned off when a discrete GPU is detected).\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "Specify the VA-API device using “--va-display /dev/dri/”.\n"); - print_available_drm_nodes(); - } exit(1); } return surface;