diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2026-02-21 21:27:59 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-21 20:27:59 +0000 |
| commit | 9f59ed786856df8a28430e4084491c7e9fa6234f (patch) | |
| tree | 30d79f4a842c59e4e630b5e62387e771a1401984 /src/helpers/Drm.cpp | |
| parent | a20142bccead74ea810fcfde54cd7eaa0d0fe5b0 (diff) | |
multigpu: fix multi gpu checking (#13277)
* multigpu: fix multi gpu checking
drmFD() from allocators is not always equal, because we reopen them
inside AQ for refcounting, meaning they get duplicated and become their
own fds, so checking if fd1 == fd2 ends up wrong.
introduce sameGpu in MiscFunctions that checks the actual drmDevice
meaning we can now even check if a rendernode is the same gpu as a
display node if we want.
* multigpu: move sameGpu to DRM namespace
move sameGpu out of MiscFunctions to DRM namespace.
Diffstat (limited to 'src/helpers/Drm.cpp')
| -rw-r--r-- | src/helpers/Drm.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/helpers/Drm.cpp b/src/helpers/Drm.cpp new file mode 100644 index 00000000..207b5e3d --- /dev/null +++ b/src/helpers/Drm.cpp @@ -0,0 +1,20 @@ +#include <xf86drm.h> +#include "Drm.hpp" + +bool DRM::sameGpu(int fd1, int fd2) { + drmDevice* devA = nullptr; + drmDevice* devB = nullptr; + + if (drmGetDevice2(fd1, 0, &devA) != 0) + return false; + if (drmGetDevice2(fd2, 0, &devB) != 0) { + drmFreeDevice(&devA); + return false; + } + + bool same = drmDevicesEqual(devA, devB); + + drmFreeDevice(&devA); + drmFreeDevice(&devB); + return same; +} |
