update patches and target DMA-BUF support

Signed-off-by: Antoine Damhet <antoine.damhet@lse.epita.fr>
This commit is contained in:
Antoine Damhet 2020-09-01 12:47:53 +02:00
parent 634213618f
commit 9ef2e68bf4
No known key found for this signature in database
GPG key ID: DC09A32F3CE58F3E
26 changed files with 1074 additions and 86 deletions

View file

@ -1,7 +1,7 @@
pkgbase = obs-studio-wayland pkgbase = obs-studio-wayland
pkgdesc = Free, open source software for live streaming and recording (with wayland patches) pkgdesc = Free, open source software for live streaming and recording (with wayland patches)
pkgver = 25.0.8 pkgver = 25.0.8
pkgrel = 4 pkgrel = 5
url = https://obsproject.com url = https://obsproject.com
arch = x86_64 arch = x86_64
license = GPL2 license = GPL2
@ -55,28 +55,36 @@ pkgbase = obs-studio-wayland
source = 0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch source = 0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch
source = 0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch source = 0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch
source = 0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch source = 0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch
source = 0021-libobs-graphics-Add-Linux-only-device_texture_create.patch
source = 0022-deps-glad-Add-DMA-BUF-EGL-extensions.patch
source = 0023-libobs-opengl-Implement-DMA-BUF-importing-on-EGL-ren.patch
source = 0024-libobs-opengl-Create-GLES2-contexts.patch
sha512sums = a97c03dc218a4e03e48f6a7dc82b4a59ebeee2039f17be66bb847681ce9ff3d25e6e015be4af78fe44739f6fad5089b6e683d7657c2e4fde8e547df9a2594a08 sha512sums = a97c03dc218a4e03e48f6a7dc82b4a59ebeee2039f17be66bb847681ce9ff3d25e6e015be4af78fe44739f6fad5089b6e683d7657c2e4fde8e547df9a2594a08
sha512sums = 1ff0e088eed61554268009f3d8c5a23c0888bfbe860d6cb288ddf348108446c152fd87e2cb8f54613a88378d8474550632c90f924005d5e0343bf1a801339ccc sha512sums = 1ff0e088eed61554268009f3d8c5a23c0888bfbe860d6cb288ddf348108446c152fd87e2cb8f54613a88378d8474550632c90f924005d5e0343bf1a801339ccc
sha512sums = c322fb6dbe90bd3b9d298867731388ef306f3dbf038b2cb0f3f262c52981200ae949db6917b50c751b6920a40eef4b4fa8108ef5db9b83575ff3556024fa8f79 sha512sums = c4e653fc744000e0b178848b21f326065dbc83966876594fd349be9b847382afabd0321081e83f3ef094fe067c97d8200817a6cd752df260874bc943271a8658
sha512sums = 78670b678538cc43cc484e377c14bce6a55cb36be00c8db485e1e084b6eafd1833cae376b1f618b329dd2c4d50fa1de53c6bf252932edce97253f4b19f229500 sha512sums = 2359bb8f074e5e5676eefe4c655d79611c901f0c8316275ced4d711be42f74ea29d0167ad018f51064fb8a51535969ae742c576a8afe9d710116f7379a1ee67d
sha512sums = 9aaf118e233d6e7eda5f72b77eefedb641e11ddf0daff0463ae25cc4440de8e52903813215ec6bf33f82eb3c11febd166ce3859bfbe4044cd5e09a018ceb391c sha512sums = 019fd92b51cb432d81d4265e85751040aeedc1f466181c2e2ec14c253335b1a23571e961ce6415e045fa51ea15731de6e540664276cdd76a3ce198d56cb13eac
sha512sums = 662438ef6e95dc8262403c931c8a749a6204bf4857f76e6fccee5084dcbe2ca693309ca078170e25d13be1cfd4d4a8746cbfc318c473d0ea52b332adb5e90c61 sha512sums = 2f3186d862a78d41496e5a43dd01f5b56edac9873ea309bdcc8c9a83083437e7a252ef0d7373f403dc70ee4f1be8ae6fc430d710b80222ada7ae3ce16b8103ea
sha512sums = c2be03913d95f8f449c9c9df6df8be41956923baf28f30091dc9a836c9e37d4e84ee930730edf2d3cc162886809d3a42e0fd4d79fd84f27a77c9e08802de6947 sha512sums = 457534c7ffb7dd0064b143cdfe472d079251ebe891885372127cbff2b6cb70e7d1e55a2da7956c5b6d940e03f8efa57265453fa23a8fb9fa92e4b2c33c959316
sha512sums = 9b4722003418f27cbe7efed102b1a69aeb1cb9782d4249b14a7a7f10d0bce725465bda459cfd77e0e577e93f46b2ca0604f48c9a3c19e4a7b0d31b3386f0a8cf sha512sums = 2af83bba2aa2dd2aed11f9a4f431d9aaeae7c6154c921247510e91bb523cede756d0777fe522a5a6db81a9a6989769a839f365e698511890308c5a0ec6e695ec
sha512sums = 854482e4dc52293b2b488988bc05fa1835346780aa0213e4e102ece971d630fadc33d5941424673050eed7b5aba017cebe3248e62f3fb69483f389bca7aede39 sha512sums = 3f8094c9e577d81bfc9222e436947aa890ce81b2f0e3e43f979a7192cc3e1ca35ca63949e061cecdc6be0579636b6a8e0d8ba21a05a0e11a94ba42210fff851a
sha512sums = 8c5a049babe4804ab2b701591ab2ed9e597e974279431d728461807df5a37361164ce21b36d832017daa6e967bac545dc7c25f17433f4f6eef9c937da35ede34 sha512sums = d0ff4c1bcb156b2c81be38682d4f99b1388d25521f7981016e850f1e8989d0bfe0d3d71d4ec18382f861ca889bcdfb27dd4d73ca7f763f997a5e388bbc8bdcbc
sha512sums = 5055c4bdd282743e7971be8eccce627eb0e1eb607bdf7f306748cd7898fcf08eaf64d870e753940682dac1691a6c959a539a032bae104b9d1a6fe4ca2e16187f sha512sums = 061f7122d5ff8a98dd4ef875c2d7dc60a2dc30627a01a960bd78539e6c7f2bcbfda48f9f42f9f61434f6263686641af2cfb4d6971682be542b6c6f037986e6da
sha512sums = 00b1909e225e479483fd1b23053dbff5630526d927e5df7eb9fe3c340f27bf343d64796ee66e37b4e7f3f6bab8649ad93fa76b6b2a4628e31b1894cab417f247 sha512sums = a91815239465656a0ab5902e524277659e0e3ab953d0539bc8ead8f65b3a279a801c02635aad541f871f5007943af704c8c64fec90534c66fe6e418d24787300
sha512sums = 5b33e379d789ae1e17354a210531498765ee64773f0a457f505de480b10c9adfa9116e121e8a31757fbc0bc241c71fd9921ac796b7c4b038f4dea2cf0a04aa48 sha512sums = e3bdcdae93fa134c1174bf84152385ae28eb7fd82504331f4dccfd46b6565eb605b63acd4972bed08bbe765c7e213b93d94077a9fafcfe33064b4a526f02f7a6
sha512sums = b0b9d213d39cbcfdbb83f61352c8488b6a95d414f4299d6e7e729aa485f911d60ef4f047ca13d006dc77b1c43a7f49db381fec5c1e695e3ec9da0e6eab99bb61 sha512sums = f134c9fed318fde1d11f59e56676cc512bdea81df6a5ce90202759b300405d02981b6586e090cbae65fb730ca352c3942eeec636bb7d5a571475a815f73be89d
sha512sums = 6dee9847d4d98704f393f1f788f2a0c22b630a3e4021846afa356ba2bb4be664e0b6e0f4b3ee2e58d889e7d33a90b516b91ad6bc6b2c241c22245be68ca098b7 sha512sums = 530846836b8efc6b7549fb6d2b4288ac9782420fd8e51c988d579f701bc4a1f58b7f941d472ad7d4ab07869e45dfc905c3927a3ad735178a109881ed02ffdb77
sha512sums = 01953fc6cd1a5789a6fa5be076da53ba5e8f56418b9f2badca3af6221acf72107e4f73a06a082b20894fdd18aa5263668411d72f4ef237af81f3f2ed86a63be8 sha512sums = 014a9dd855e696a33e3b5c8f8a11ec6cf1edc6e0e6478cc5f11530c5535a1d1dfaaa75c5a3de258178e1ab16256fb8303b18c8a69407febe58a7d860b2396fda
sha512sums = e5ad79d67b15b5b245b8f06da0321d221d47aa91297b2c8a6c941c2a49b78e413edf3c6fac08bdcf573fa4cdf1632d8ba1b1ad5697ae67ece96b0fd1f4264a91 sha512sums = afb5a5b0cfa09407efe6924b37f8c3b26ccf244acc4a99fcee0eb6705855d2dc8589ecbdb2fcf9066c9ec6d947a6810f58efe34362aa451af4cdf7fa30f2e4e4
sha512sums = 7b93c07e21efc66ef444db68e25b4f66e7b3acd111b70dc8c6c39a6ebcff29b3238a749693134a59d568757732c93a8c39f1624686161b967828f6ef267b4ac6 sha512sums = 5a09040d91bf293389c328f758416f29840eaf6b0acd78adf14b47fc48c417fb1b02ab97dc90c7d8381bc9ffa817cbc6acc83fd318ba85d73d39ae8f4f7a35e1
sha512sums = ff4e3e8b463a054df5a9b57b670971d2ba4dd4345e0cf7455d2d1d4dd8d911390533fdd42bfd027c3726a717e91ebb0cdf8855f47be065581179fa225f831d22 sha512sums = d1ed4b6bb07b2da105e2d69c5af1d61bcd39f141c2500e606f251f2220632f4173d3b3de9e2c88dd0bf2e230cba291cda50fb3a7ca89ff391d0e5e36b2e4aa2f
sha512sums = 4fe456675224ab8692828ef022aae35899027ecbc98c70c47621e9b0e9839b332a5b1548736515ae09b3fcbe46ad17c35cd1338310d96e68db3337cc9dc2a2ee sha512sums = c5b82ddaad7bcc5608168a318e6dde9a0aa0d1dc789d29751a9b22bec2b68288c71e5719c620073ee3c8d9bbf63d60e1634a351cc155b8f2b823d0cbc83cf578
sha512sums = e1358bdb7455aeae737c33a9180e225de288a25df16337ab2ed2a51e8ca6df66d89b863d1539a43a3c409b372a19cdbb5be37f842fc9320fb7046eabf69fcaba sha512sums = c9d1e42cb87964b764a70044aa828c8d712c709d9e1245f644e8aa2f4576cd33c78e81b9b736d39939959aa3811fe4a9cb6970c8278c22d3f5b7f48d43ae1d55
sha512sums = cd3ab0c4c71e7c289732530dfb3230ebb35a4021335b3a0ad9bce5ec8c9ad352cb7b2fbb3ed1d6c5d7d9c32f27a90f5cfb2b1a00426def1f712d679da68f5795 sha512sums = a9893913797b503249d182ebbac0452827a837187e7817c46ab76df5d004ada810c2ff8523518d408daf396a4c72f707777a3dadeca598f404b074581f0125e8
sha512sums = 848bcf4f525cca508131960fe6bb2757b0975065f680da9c8d692b5ea28b4c5cca7c2e71f1498c8425c0549fc23a41895638da9e1c433d05e6425ea36dc3ec1b
sha512sums = 71e11ef607a0371c378db0d50155530d2a918ca47fe15dd29dab36f50dda4a8e7a487f3600b4b03a240db4e84b73c5b49186ca275fb1968de8f15c8d16e8a813
sha512sums = 73b82cd530e26d3751de9d3e54da0994cbd5d7c9e5ceed7088d50ef4eda8a8c36d30812e8e4a82be014813ed09aefcfa14e7361189a7b4cf763f20aa2ebda7b7
sha512sums = 1442f7918df45b37e9b3bef05573d4f8c7224f950a85fd0b6200a2ca70b377344ecf37ed69b5474453f584d0992b446383b1a708c326e993a9c815882ba4232f
pkgname = obs-studio-wayland pkgname = obs-studio-wayland

View file

@ -1,7 +1,7 @@
From 4521189274e652de6d2098337038c412501c570d Mon Sep 17 00:00:00 2001 From 48e3ddab8d44f1bb5c0430aef3b480c3c73a342d Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Mon, 9 Mar 2020 13:10:16 -0300 Date: Mon, 9 Mar 2020 13:10:16 -0300
Subject: [PATCH 01/20] deps-glad: Add EGL Subject: [PATCH 01/24] deps-glad: Add EGL
The code is generated by https://glad.dav1d.de/ The code is generated by https://glad.dav1d.de/
--- ---

View file

@ -1,7 +1,7 @@
From 1367a881c16592a486229ac024df2cf08fb43b7a Mon Sep 17 00:00:00 2001 From 3e53cda423e6969a8e7d842c5f1b0fe58f2ccfd6 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Mon, 9 Mar 2020 13:19:31 -0300 Date: Mon, 9 Mar 2020 13:19:31 -0300
Subject: [PATCH 02/20] libobs-opengl: Rename gl-x11.c to gl-x11-glx.c Subject: [PATCH 02/24] libobs-opengl: Rename gl-x11.c to gl-x11-glx.c
This is in preparation for the future abstraction layer (gl-x11-*) This is in preparation for the future abstraction layer (gl-x11-*)
and also to match the actual name of the windowing system. When and also to match the actual name of the windowing system. When

View file

@ -1,7 +1,7 @@
From 9394af80060680154a3c00e8ea23cced0d06179d Mon Sep 17 00:00:00 2001 From e1eb076e87330b4cc197ae9f88cb1ede215dea71 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Mon, 9 Mar 2020 16:46:37 -0300 Date: Mon, 9 Mar 2020 16:46:37 -0300
Subject: [PATCH 03/20] libobs-opengl: Factor out GLX winsys Subject: [PATCH 03/24] libobs-opengl: Factor out GLX winsys
Move the GLX-related code to gl-x11-glx, and introduce gl-nix as Move the GLX-related code to gl-x11-glx, and introduce gl-nix as
a winsys-agnostic abstraction layer. gl-nix serves as the runtime a winsys-agnostic abstraction layer. gl-nix serves as the runtime

View file

@ -1,7 +1,7 @@
From 12ef68d9914bd4aec60ef9bdf77f67099534a208 Mon Sep 17 00:00:00 2001 From 1219e3656bd1cd07dccb454684e3e535c9de732d Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Mon, 9 Mar 2020 17:35:49 -0300 Date: Mon, 9 Mar 2020 17:35:49 -0300
Subject: [PATCH 04/20] libobs-opengl: Introduce the X11/EGL winsys Subject: [PATCH 04/24] libobs-opengl: Introduce the X11/EGL winsys
Introduce the EGL/X11 winsys, and use it when the OBS_USE_EGL environment Introduce the EGL/X11 winsys, and use it when the OBS_USE_EGL environment
variable is defined. This variable is only temporary, for future commits variable is defined. This variable is only temporary, for future commits

View file

@ -1,7 +1,7 @@
From ce73c0d635a4cff3ab254235c48e8ebe0b371cef Mon Sep 17 00:00:00 2001 From 0be95c8ba491b168db8b44319e53af10e0646c07 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Sat, 11 Apr 2020 23:49:05 -0300 Date: Sat, 11 Apr 2020 23:49:05 -0300
Subject: [PATCH 05/20] deps/glad: Make X11 required as well Subject: [PATCH 05/24] deps/glad: Make X11 required as well
To keep consistency with the EGL line To keep consistency with the EGL line
--- ---

View file

@ -1,7 +1,7 @@
From 74515e17f35d9afb75a9ea7ec024e36782b168f6 Mon Sep 17 00:00:00 2001 From 4056740eb1ba8de4eb0b4ec6621c48e3ca5fb314 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Fri, 6 Mar 2020 16:22:01 -0300 Date: Fri, 6 Mar 2020 16:22:01 -0300
Subject: [PATCH 06/20] ci: Install qtbase5-private-dev on Linux Subject: [PATCH 06/24] ci: Install qtbase5-private-dev on Linux
List this dependency both under CI/install-dependencies-linux.sh, and List this dependency both under CI/install-dependencies-linux.sh, and
.github/workflows/main.yml. .github/workflows/main.yml.

View file

@ -1,7 +1,7 @@
From 7301a59e6b593bc6d016d3de74e80c1b1361b508 Mon Sep 17 00:00:00 2001 From 7aa2fd8902ede3ad5eabe3e0152d9688d12cf9bb Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Fri, 6 Mar 2020 17:24:33 -0300 Date: Fri, 6 Mar 2020 17:24:33 -0300
Subject: [PATCH 07/20] libobs/nix: Move X11-specific code to obs-nix-x11.c Subject: [PATCH 07/24] libobs/nix: Move X11-specific code to obs-nix-x11.c
Currently, obs-nix.c is highly tied to the X11 display Currently, obs-nix.c is highly tied to the X11 display
server. It includes X11 headers directly, and make use server. It includes X11 headers directly, and make use

View file

@ -1,7 +1,7 @@
From 6e1eef3b6dd72ca2e7ab212e0eb69685347787ea Mon Sep 17 00:00:00 2001 From 53d14fdc3ddcd1e5232e9eb3dbd6cb993893b4b1 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Fri, 6 Mar 2020 17:50:41 -0300 Date: Fri, 6 Mar 2020 17:50:41 -0300
Subject: [PATCH 08/20] libobs: Introduce the concept of a Unix platform Subject: [PATCH 08/24] libobs: Introduce the concept of a Unix platform
This is a Unix-specific code. The only available platforms This is a Unix-specific code. The only available platforms
at this point are the X11/GLX and X11/EGL platforms. at this point are the X11/GLX and X11/EGL platforms.

View file

@ -1,7 +1,7 @@
From 9f0f337d03700defaa24fc77cf2f4fbd861b8fd4 Mon Sep 17 00:00:00 2001 From a80131faaa1fad9aff4c4cbe79d49016ff24a6e7 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Tue, 7 Apr 2020 23:17:02 -0300 Date: Tue, 7 Apr 2020 23:17:02 -0300
Subject: [PATCH 09/20] UI: Set the Unix platform on startup Subject: [PATCH 09/24] UI: Set the Unix platform on startup
Move the OBS_USE_EGL environment variable check to obs-app.cpp, Move the OBS_USE_EGL environment variable check to obs-app.cpp,
and set the OBS platform to be either OBS_NIX_PLATFORM_X11_GLX and set the OBS platform to be either OBS_NIX_PLATFORM_X11_GLX

View file

@ -1,7 +1,7 @@
From 56c897b64464170cdcf6ad0cdd6de7a3b9addff1 Mon Sep 17 00:00:00 2001 From 7f6041c7cb282d5354ad4afc545341f1437d1b46 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Wed, 8 Apr 2020 23:58:43 -0300 Date: Wed, 8 Apr 2020 23:58:43 -0300
Subject: [PATCH 10/20] linux-capture: Fail to load when running on EGL Subject: [PATCH 10/24] linux-capture: Fail to load when running on EGL
Right now, linux-capture hard-depends on GLX. Disable it when Right now, linux-capture hard-depends on GLX. Disable it when
running under EGL. running under EGL.

View file

@ -1,7 +1,7 @@
From f2c169236834251a78e8185b78fdec628762535f Mon Sep 17 00:00:00 2001 From 4f0e966291fc8f6780f1ff6439ada95e63847b95 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Fri, 6 Mar 2020 18:53:42 -0300 Date: Fri, 6 Mar 2020 18:53:42 -0300
Subject: [PATCH 11/20] libobs: Add a Wayland platform Subject: [PATCH 11/24] libobs: Add a Wayland platform
Introduce the OBS_NIX_PLATFORM_WAYLAND enum value, and try to detect Introduce the OBS_NIX_PLATFORM_WAYLAND enum value, and try to detect
it when OBS Studio runs by looking into the platform name. it when OBS Studio runs by looking into the platform name.

View file

@ -1,7 +1,7 @@
From ff3dbf578c696659433bc30c039c4e2e5d10765a Mon Sep 17 00:00:00 2001 From 8c482e031d9891e13d787653135651426661b3b6 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Sat, 11 Apr 2020 23:32:16 -0300 Date: Sat, 11 Apr 2020 23:32:16 -0300
Subject: [PATCH 12/20] libobs-opengl: Try to use the platform display if Subject: [PATCH 12/24] libobs-opengl: Try to use the platform display if
available available
We need to ensure we're running all X11 code on the same display. We need to ensure we're running all X11 code on the same display.

View file

@ -1,16 +1,16 @@
From b6d1651ad733f0b59c442ceb29c3e936554df5b5 Mon Sep 17 00:00:00 2001 From c5e9210a3b0d5a19cfc1b74ea400f049d4983992 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Mon, 9 Mar 2020 21:09:11 -0300 Date: Mon, 9 Mar 2020 21:09:11 -0300
Subject: [PATCH 13/20] libobs-opengl: Introduce an EGL/Wayland renderer Subject: [PATCH 13/24] libobs-opengl: Introduce an EGL/Wayland renderer
Introduce a new Wayland/EGL renderer. Introduce a new Wayland/EGL renderer.
--- ---
libobs-opengl/CMakeLists.txt | 23 +++ libobs-opengl/CMakeLists.txt | 23 +++
libobs-opengl/gl-nix.c | 7 +- libobs-opengl/gl-nix.c | 7 +-
libobs-opengl/gl-nix.h | 1 + libobs-opengl/gl-nix.h | 1 +
libobs-opengl/gl-wayland-egl.c | 339 +++++++++++++++++++++++++++++++++ libobs-opengl/gl-wayland-egl.c | 342 +++++++++++++++++++++++++++++++++
libobs-opengl/gl-wayland-egl.h | 22 +++ libobs-opengl/gl-wayland-egl.h | 22 +++
5 files changed, 391 insertions(+), 1 deletion(-) 5 files changed, 394 insertions(+), 1 deletion(-)
create mode 100644 libobs-opengl/gl-wayland-egl.c create mode 100644 libobs-opengl/gl-wayland-egl.c
create mode 100644 libobs-opengl/gl-wayland-egl.h create mode 100644 libobs-opengl/gl-wayland-egl.h
@ -87,10 +87,10 @@ index f5532719..741154da 100644
#include "gl-subsystem.h" #include "gl-subsystem.h"
diff --git a/libobs-opengl/gl-wayland-egl.c b/libobs-opengl/gl-wayland-egl.c diff --git a/libobs-opengl/gl-wayland-egl.c b/libobs-opengl/gl-wayland-egl.c
new file mode 100644 new file mode 100644
index 00000000..28e8b1c0 index 00000000..aad6993e
--- /dev/null --- /dev/null
+++ b/libobs-opengl/gl-wayland-egl.c +++ b/libobs-opengl/gl-wayland-egl.c
@@ -0,0 +1,339 @@ @@ -0,0 +1,342 @@
+/****************************************************************************** +/******************************************************************************
+ Copyright (C) 2019 by Jason Francis <cycl0ps@tuta.io> + Copyright (C) 2019 by Jason Francis <cycl0ps@tuta.io>
+ +
@ -404,6 +404,9 @@ index 00000000..28e8b1c0
+{ +{
+ struct gl_platform *plat = device->plat; + struct gl_platform *plat = device->plat;
+ struct gl_windowinfo *wi = device->cur_swap->wi; + struct gl_windowinfo *wi = device->cur_swap->wi;
+ if (eglSwapInterval(plat->display, 0) == EGL_FALSE) {
+ blog(LOG_ERROR, "eglSwapInterval failed");
+ }
+ if (eglSwapBuffers(plat->display, wi->egl_surface) == EGL_FALSE) { + if (eglSwapBuffers(plat->display, wi->egl_surface) == EGL_FALSE) {
+ blog(LOG_ERROR, "eglSwapBuffers failed"); + blog(LOG_ERROR, "eglSwapBuffers failed");
+ } + }

View file

@ -1,7 +1,7 @@
From ffe8b9083f11be627dbfabaf5034d1976d03551a Mon Sep 17 00:00:00 2001 From e628aba53a2c4e327460d9b005ecef56bf54ee72 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Mon, 9 Mar 2020 21:23:37 -0300 Date: Mon, 9 Mar 2020 21:23:37 -0300
Subject: [PATCH 14/20] UI: Retrieve Wayland surface from QWindow Subject: [PATCH 14/24] UI: Retrieve Wayland surface from QWindow
On Wayland, we want to query the window's underlying On Wayland, we want to query the window's underlying
platform for the Wayland surface, instead of foolishly platform for the Wayland surface, instead of foolishly

View file

@ -1,7 +1,7 @@
From 64ab8a3f8e7bc6826dcf2a378e32e4dabb7eadba Mon Sep 17 00:00:00 2001 From 334bad8172f854d14e3079f03349d16a4ce2df73 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Tue, 18 Aug 2020 19:38:29 -0300 Date: Tue, 18 Aug 2020 19:38:29 -0300
Subject: [PATCH 15/20] UI: Destroy display when becoming invisible Subject: [PATCH 15/24] UI: Destroy display when becoming invisible
When a window is made invisible, then visible again, the When a window is made invisible, then visible again, the
obs_display is reused. Turns out, QT destroys the wl_surface obs_display is reused. Turns out, QT destroys the wl_surface

View file

@ -1,7 +1,7 @@
From 107533c8298418360acbbbf7b51aa9ea1ffc30a0 Mon Sep 17 00:00:00 2001 From 7b989da443d84cca425c3669f072e413825bc657 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Wed, 19 Aug 2020 10:11:08 -0300 Date: Wed, 19 Aug 2020 10:11:08 -0300
Subject: [PATCH 16/20] UI: Don't create obs_display when QTToGSWindow fails Subject: [PATCH 16/24] UI: Don't create obs_display when QTToGSWindow fails
Right after showing the OBSQTDisplay widget, it may happen that a Right after showing the OBSQTDisplay widget, it may happen that a
wl_surface is not yet created and attached to the window. When this wl_surface is not yet created and attached to the window. When this

View file

@ -1,7 +1,7 @@
From bd07471e8298f4b71c69d6a25ded5293141fd4fc Mon Sep 17 00:00:00 2001 From c69023203d043f4ed5d600911a11dacce1331b4f Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Wed, 19 Aug 2020 13:08:01 -0300 Date: Wed, 19 Aug 2020 13:08:01 -0300
Subject: [PATCH 17/20] UI: Rename callback to match signal name Subject: [PATCH 17/24] UI: Rename callback to match signal name
The sizeChanged callback is connected to the screenChanged signal, The sizeChanged callback is connected to the screenChanged signal,
and evidently the naming doesn't match. Rename the callback to and evidently the naming doesn't match. Rename the callback to

View file

@ -1,7 +1,7 @@
From d4b8722c46a5ff92ed2688e8f67e33c8af9d2de0 Mon Sep 17 00:00:00 2001 From f385ff60cf00ed6bac84483bd5da9aa84638bb14 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Wed, 19 Aug 2020 15:09:26 -0300 Date: Wed, 19 Aug 2020 15:09:26 -0300
Subject: [PATCH 18/20] UI: Disable and ignore Always On Top on Wayland Subject: [PATCH 18/24] UI: Disable and ignore Always On Top on Wayland
platforms platforms
This is a dangerous operation on Wayland, and is crashing not only This is a dangerous operation on Wayland, and is crashing not only

View file

@ -1,7 +1,7 @@
From 484ff6702e4c230a4769cdb7289c013de9b12b58 Mon Sep 17 00:00:00 2001 From e6406c1fb4fcd81383dd11847d0a21908a030877 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Thu, 20 Aug 2020 11:57:19 -0300 Date: Thu, 20 Aug 2020 11:57:19 -0300
Subject: [PATCH 19/20] UI: Make OBSQTDisplay::CreateDisplay() public and allow Subject: [PATCH 19/24] UI: Make OBSQTDisplay::CreateDisplay() public and allow
forcing creation forcing creation
This will be used by a new event filter, added only when running as a Wayland This will be used by a new event filter, added only when running as a Wayland

View file

@ -1,7 +1,7 @@
From db7ed40e1e0c566d4c6bed53c283327c9d55ce4c Mon Sep 17 00:00:00 2001 From af18bb55d32a6794cd6ce2dd5f16d9a8e6bc700e Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com> From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Thu, 20 Aug 2020 11:58:45 -0300 Date: Thu, 20 Aug 2020 11:58:45 -0300
Subject: [PATCH 20/20] UI: Check for Expose and PlatformSurface events to Subject: [PATCH 20/24] UI: Check for Expose and PlatformSurface events to
create display create display
This is a workaround for QWaylandWindow never becoming exposed, or This is a workaround for QWaylandWindow never becoming exposed, or

View file

@ -0,0 +1,275 @@
From 35142e4c7c0ff41dfd869dbcdcef05ebc47102d3 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Thu, 12 Mar 2020 23:50:18 -0300
Subject: [PATCH 21/24] libobs/graphics: Add Linux-only
device_texture_create_from_dmabuf
The implementation are stubs as of now
---
libobs-opengl/gl-nix.c | 11 +++++++++++
libobs-opengl/gl-nix.h | 6 ++++++
libobs-opengl/gl-wayland-egl.c | 21 +++++++++++++++++++++
libobs-opengl/gl-x11-egl.c | 21 +++++++++++++++++++++
libobs-opengl/gl-x11-glx.c | 21 +++++++++++++++++++++
libobs/graphics/device-exports.h | 10 ++++++++++
libobs/graphics/graphics-imports.c | 2 ++
libobs/graphics/graphics-internal.h | 6 ++++++
libobs/graphics/graphics.c | 19 +++++++++++++++++++
libobs/graphics/graphics.h | 9 +++++++++
10 files changed, 126 insertions(+)
diff --git a/libobs-opengl/gl-nix.c b/libobs-opengl/gl-nix.c
index 6c272c3d..acbd154a 100644
--- a/libobs-opengl/gl-nix.c
+++ b/libobs-opengl/gl-nix.c
@@ -123,3 +123,14 @@ extern void device_present(gs_device_t *device)
{
gl_vtable->device_present(device);
}
+
+extern struct gs_texture *device_texture_create_from_dmabuf(
+ gs_device_t *device, unsigned int width, unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes, const int *fds,
+ const uint32_t *strides, const uint32_t *offsets,
+ const uint64_t *modifiers)
+{
+ return gl_vtable->device_texture_create_from_dmabuf(
+ device, width, height, color_format, n_planes, fds, strides,
+ offsets, modifiers);
+}
diff --git a/libobs-opengl/gl-nix.h b/libobs-opengl/gl-nix.h
index 741154da..3038c0cf 100644
--- a/libobs-opengl/gl-nix.h
+++ b/libobs-opengl/gl-nix.h
@@ -53,4 +53,10 @@ struct gl_winsys_vtable {
gs_swapchain_t *swap);
void (*device_present)(gs_device_t *device);
+
+ struct gs_texture *(*device_texture_create_from_dmabuf)(
+ gs_device_t *device, unsigned int width, unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes,
+ const int *fds, const uint32_t *strides,
+ const uint32_t *offsets, const uint64_t *modifiers);
};
diff --git a/libobs-opengl/gl-wayland-egl.c b/libobs-opengl/gl-wayland-egl.c
index aad6993e..3968736d 100644
--- a/libobs-opengl/gl-wayland-egl.c
+++ b/libobs-opengl/gl-wayland-egl.c
@@ -319,6 +319,25 @@ static void gl_wayland_egl_device_present(gs_device_t *device)
}
}
+static struct gs_texture *gl_wayland_egl_device_texture_create_from_dmabuf(
+ gs_device_t *device, unsigned int width, unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes, const int *fds,
+ const uint32_t *strides, const uint32_t *offsets,
+ const uint64_t *modifiers)
+{
+ UNUSED_PARAMETER(device);
+ UNUSED_PARAMETER(width);
+ UNUSED_PARAMETER(height);
+ UNUSED_PARAMETER(color_format);
+ UNUSED_PARAMETER(n_planes);
+ UNUSED_PARAMETER(fds);
+ UNUSED_PARAMETER(strides);
+ UNUSED_PARAMETER(offsets);
+ UNUSED_PARAMETER(modifiers);
+
+ return NULL;
+}
+
static const struct gl_winsys_vtable egl_wayland_winsys_vtable = {
.windowinfo_create = gl_wayland_egl_windowinfo_create,
.windowinfo_destroy = gl_wayland_egl_windowinfo_destroy,
@@ -334,6 +353,8 @@ static const struct gl_winsys_vtable egl_wayland_winsys_vtable = {
.update = gl_wayland_egl_update,
.device_load_swapchain = gl_wayland_egl_device_load_swapchain,
.device_present = gl_wayland_egl_device_present,
+ .device_texture_create_from_dmabuf =
+ gl_wayland_egl_device_texture_create_from_dmabuf,
};
const struct gl_winsys_vtable *gl_wayland_egl_get_winsys_vtable(void)
diff --git a/libobs-opengl/gl-x11-egl.c b/libobs-opengl/gl-x11-egl.c
index 47b8e420..7a9c5975 100644
--- a/libobs-opengl/gl-x11-egl.c
+++ b/libobs-opengl/gl-x11-egl.c
@@ -634,6 +634,25 @@ static void gl_x11_egl_device_present(gs_device_t *device)
get_egl_error_string());
}
+static struct gs_texture *gl_x11_egl_device_texture_create_from_dmabuf(
+ gs_device_t *device, unsigned int width, unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes, const int *fds,
+ const uint32_t *strides, const uint32_t *offsets,
+ const uint64_t *modifiers)
+{
+ UNUSED_PARAMETER(device);
+ UNUSED_PARAMETER(width);
+ UNUSED_PARAMETER(height);
+ UNUSED_PARAMETER(color_format);
+ UNUSED_PARAMETER(n_planes);
+ UNUSED_PARAMETER(fds);
+ UNUSED_PARAMETER(strides);
+ UNUSED_PARAMETER(offsets);
+ UNUSED_PARAMETER(modifiers);
+
+ return NULL;
+}
+
static const struct gl_winsys_vtable egl_x11_winsys_vtable = {
.windowinfo_create = gl_x11_egl_windowinfo_create,
.windowinfo_destroy = gl_x11_egl_windowinfo_destroy,
@@ -649,6 +668,8 @@ static const struct gl_winsys_vtable egl_x11_winsys_vtable = {
.update = gl_x11_egl_update,
.device_load_swapchain = gl_x11_egl_device_load_swapchain,
.device_present = gl_x11_egl_device_present,
+ .device_texture_create_from_dmabuf =
+ gl_x11_egl_device_texture_create_from_dmabuf,
};
const struct gl_winsys_vtable *gl_x11_egl_get_winsys_vtable(void)
diff --git a/libobs-opengl/gl-x11-glx.c b/libobs-opengl/gl-x11-glx.c
index a562b564..802be3ef 100644
--- a/libobs-opengl/gl-x11-glx.c
+++ b/libobs-opengl/gl-x11-glx.c
@@ -579,6 +579,25 @@ static void gl_x11_glx_device_present(gs_device_t *device)
glXSwapBuffers(display, window);
}
+static struct gs_texture *gl_x11_glx_device_texture_create_from_dmabuf(
+ gs_device_t *device, unsigned int width, unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes, const int *fds,
+ const uint32_t *strides, const uint32_t *offsets,
+ const uint64_t *modifiers)
+{
+ UNUSED_PARAMETER(device);
+ UNUSED_PARAMETER(width);
+ UNUSED_PARAMETER(height);
+ UNUSED_PARAMETER(color_format);
+ UNUSED_PARAMETER(n_planes);
+ UNUSED_PARAMETER(fds);
+ UNUSED_PARAMETER(strides);
+ UNUSED_PARAMETER(offsets);
+ UNUSED_PARAMETER(modifiers);
+
+ return NULL;
+}
+
static const struct gl_winsys_vtable glx_winsys_vtable = {
.windowinfo_create = gl_x11_glx_windowinfo_create,
.windowinfo_destroy = gl_x11_glx_windowinfo_destroy,
@@ -594,6 +613,8 @@ static const struct gl_winsys_vtable glx_winsys_vtable = {
.update = gl_x11_glx_update,
.device_load_swapchain = gl_x11_glx_device_load_swapchain,
.device_present = gl_x11_glx_device_present,
+ .device_texture_create_from_dmabuf =
+ gl_x11_glx_device_texture_create_from_dmabuf,
};
const struct gl_winsys_vtable *gl_x11_glx_get_winsys_vtable(void)
diff --git a/libobs/graphics/device-exports.h b/libobs/graphics/device-exports.h
index 9b4e14b7..06ae4885 100644
--- a/libobs/graphics/device-exports.h
+++ b/libobs/graphics/device-exports.h
@@ -166,6 +166,16 @@ EXPORT void device_debug_marker_begin(gs_device_t *device,
const float color[4]);
EXPORT void device_debug_marker_end(gs_device_t *device);
+#if __linux__
+
+EXPORT gs_texture_t *device_texture_create_from_dmabuf(
+ gs_device_t *device, unsigned int width, unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes, const int *fds,
+ const uint32_t *strides, const uint32_t *offsets,
+ const uint64_t *modifiers);
+
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/libobs/graphics/graphics-imports.c b/libobs/graphics/graphics-imports.c
index 0d3c2593..1b5b6fda 100644
--- a/libobs/graphics/graphics-imports.c
+++ b/libobs/graphics/graphics-imports.c
@@ -216,6 +216,8 @@ bool load_graphics_imports(struct gs_exports *exports, void *module,
GRAPHICS_IMPORT_OPTIONAL(device_stagesurface_create_nv12);
GRAPHICS_IMPORT_OPTIONAL(device_register_loss_callbacks);
GRAPHICS_IMPORT_OPTIONAL(device_unregister_loss_callbacks);
+#elif __linux__
+ GRAPHICS_IMPORT(device_texture_create_from_dmabuf);
#endif
return success;
diff --git a/libobs/graphics/graphics-internal.h b/libobs/graphics/graphics-internal.h
index 4154688c..4e8f4e53 100644
--- a/libobs/graphics/graphics-internal.h
+++ b/libobs/graphics/graphics-internal.h
@@ -315,6 +315,12 @@ struct gs_exports {
gs_device_t *device, const struct gs_device_loss *callbacks);
void (*device_unregister_loss_callbacks)(gs_device_t *device,
void *data);
+#elif __linux__
+ struct gs_texture *(*device_texture_create_from_dmabuf)(
+ gs_device_t *device, unsigned int width, unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes,
+ const int *fds, const uint32_t *strides,
+ const uint32_t *offsets, const uint64_t *modifiers);
#endif
};
diff --git a/libobs/graphics/graphics.c b/libobs/graphics/graphics.c
index 902ba4b6..ea403ac8 100644
--- a/libobs/graphics/graphics.c
+++ b/libobs/graphics/graphics.c
@@ -1358,6 +1358,25 @@ gs_texture_t *gs_texture_create(uint32_t width, uint32_t height,
levels, data, flags);
}
+#if __linux__
+
+gs_texture_t *gs_texture_create_from_dmabuf(unsigned int width,
+ unsigned int height,
+ enum gs_color_format color_format,
+ uint32_t n_planes, const int *fds,
+ const uint32_t *strides,
+ const uint32_t *offsets,
+ const uint64_t *modifiers)
+{
+ graphics_t *graphics = thread_graphics;
+
+ return graphics->exports.device_texture_create_from_dmabuf(
+ graphics->device, width, height, color_format, n_planes, fds,
+ strides, offsets, modifiers);
+}
+
+#endif
+
gs_texture_t *gs_cubetexture_create(uint32_t size,
enum gs_color_format color_format,
uint32_t levels, const uint8_t **data,
diff --git a/libobs/graphics/graphics.h b/libobs/graphics/graphics.h
index 341a55d1..b60ee9fd 100644
--- a/libobs/graphics/graphics.h
+++ b/libobs/graphics/graphics.h
@@ -892,6 +892,15 @@ EXPORT gs_stagesurf_t *gs_stagesurface_create_nv12(uint32_t width,
EXPORT void gs_register_loss_callbacks(const struct gs_device_loss *callbacks);
EXPORT void gs_unregister_loss_callbacks(void *data);
+#elif __linux__
+
+EXPORT gs_texture_t *
+gs_texture_create_from_dmabuf(unsigned int width, unsigned int height,
+ enum gs_color_format color_format,
+ uint32_t n_planes, const int *fds,
+ const uint32_t *strides, const uint32_t *offsets,
+ const uint64_t *modifiers);
+
#endif
/* inline functions used by modules */
--
2.28.0

View file

@ -0,0 +1,185 @@
From 81ec6cf5002e4f381d6fdcc82bc7ac1189628f53 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Thu, 12 Mar 2020 23:57:23 -0300
Subject: [PATCH 22/24] deps-glad: Add DMA-BUF EGL extensions
---
deps/glad/include/glad/glad_egl.h | 63 +++++++++++++++++++++++++++++--
deps/glad/src/glad_egl.c | 25 ++++++++++--
2 files changed, 81 insertions(+), 7 deletions(-)
diff --git a/deps/glad/include/glad/glad_egl.h b/deps/glad/include/glad/glad_egl.h
index ac07814e..98cbd010 100644
--- a/deps/glad/include/glad/glad_egl.h
+++ b/deps/glad/include/glad/glad_egl.h
@@ -7,21 +7,24 @@
APIs: egl=1.5
Profile: -
Extensions:
+ EGL_EXT_image_dma_buf_import,
+ EGL_EXT_image_dma_buf_import_modifiers,
EGL_EXT_platform_wayland,
EGL_EXT_platform_x11,
EGL_KHR_create_context,
EGL_KHR_create_context_no_error,
EGL_KHR_platform_wayland,
- EGL_KHR_platform_x11
+ EGL_KHR_platform_x11,
+ EGL_MESA_image_dma_buf_export
Loader: True
Local files: False
Omit khrplatform: False
Reproducible: False
Commandline:
- --api="egl=1.5" --generator="c" --spec="egl" --extensions="EGL_EXT_platform_wayland,EGL_EXT_platform_x11,EGL_KHR_create_context,EGL_KHR_create_context_no_error,EGL_KHR_platform_wayland,EGL_KHR_platform_x11"
+ --api="egl=1.5" --generator="c" --spec="egl" --extensions="EGL_EXT_image_dma_buf_import,EGL_EXT_image_dma_buf_import_modifiers,EGL_EXT_platform_wayland,EGL_EXT_platform_x11,EGL_KHR_create_context,EGL_KHR_create_context_no_error,EGL_KHR_platform_wayland,EGL_KHR_platform_x11"
Online:
- https://glad.dav1d.de/#language=c&specification=egl&loader=on&api=egl%3D1.5&extensions=EGL_EXT_platform_wayland&extensions=EGL_EXT_platform_x11&extensions=EGL_KHR_create_context&extensions=EGL_KHR_create_context_no_error&extensions=EGL_KHR_platform_wayland&extensions=EGL_KHR_platform_x11
+ https://glad.dav1d.de/#language=c&specification=egl&loader=on&api=egl%3D1.5&extensions=EGL_EXT_image_dma_buf_import&extensions=EGL_EXT_image_dma_buf_import_modifiers&extensions=EGL_EXT_platform_wayland&extensions=EGL_EXT_platform_x11&extensions=EGL_KHR_create_context&extensions=EGL_KHR_create_context_no_error&extensions=EGL_KHR_platform_wayland&extensions=EGL_KHR_platform_x11
*/
@@ -339,6 +342,39 @@ EGLDisplay eglGetPlatformDisplay(EGLenum platform, void *native_display, const E
EGLSurface eglCreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
EGLSurface eglCreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
EGLBoolean eglWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags);
+#define EGL_LINUX_DMA_BUF_EXT 0x3270
+#define EGL_LINUX_DRM_FOURCC_EXT 0x3271
+#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272
+#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273
+#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274
+#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275
+#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276
+#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277
+#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278
+#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279
+#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A
+#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B
+#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C
+#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D
+#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E
+#define EGL_ITU_REC601_EXT 0x327F
+#define EGL_ITU_REC709_EXT 0x3280
+#define EGL_ITU_REC2020_EXT 0x3281
+#define EGL_YUV_FULL_RANGE_EXT 0x3282
+#define EGL_YUV_NARROW_RANGE_EXT 0x3283
+#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284
+#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285
+#define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440
+#define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441
+#define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442
+#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443
+#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444
+#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445
+#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446
+#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447
+#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448
+#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449
+#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A
#define EGL_PLATFORM_WAYLAND_EXT 0x31D8
#define EGL_PLATFORM_X11_EXT 0x31D5
#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6
@@ -359,6 +395,18 @@ EGLBoolean eglWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags);
#define EGL_PLATFORM_WAYLAND_KHR 0x31D8
#define EGL_PLATFORM_X11_KHR 0x31D5
#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6
+#ifndef EGL_EXT_image_dma_buf_import
+#define EGL_EXT_image_dma_buf_import 1
+#endif
+#ifndef EGL_EXT_image_dma_buf_import_modifiers
+#define EGL_EXT_image_dma_buf_import_modifiers 1
+typedef EGLBoolean (APIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC)(EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats);
+GLAPI PFNEGLQUERYDMABUFFORMATSEXTPROC glad_eglQueryDmaBufFormatsEXT;
+#define eglQueryDmaBufFormatsEXT glad_eglQueryDmaBufFormatsEXT
+typedef EGLBoolean (APIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC)(EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers);
+GLAPI PFNEGLQUERYDMABUFMODIFIERSEXTPROC glad_eglQueryDmaBufModifiersEXT;
+#define eglQueryDmaBufModifiersEXT glad_eglQueryDmaBufModifiersEXT
+#endif
#ifndef EGL_EXT_platform_wayland
#define EGL_EXT_platform_wayland 1
#endif
@@ -377,6 +425,15 @@ EGLBoolean eglWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags);
#ifndef EGL_KHR_platform_x11
#define EGL_KHR_platform_x11 1
#endif
+#ifndef EGL_MESA_image_dma_buf_export
+#define EGL_MESA_image_dma_buf_export 1
+typedef EGLBoolean (APIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
+GLAPI PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC glad_eglExportDMABUFImageQueryMESA;
+#define eglExportDMABUFImageQueryMESA glad_eglExportDMABUFImageQueryMESA
+typedef EGLBoolean (APIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
+GLAPI PFNEGLEXPORTDMABUFIMAGEMESAPROC glad_eglExportDMABUFImageMESA;
+#define eglExportDMABUFImageMESA glad_eglExportDMABUFImageMESA
+#endif
#ifdef __cplusplus
}
diff --git a/deps/glad/src/glad_egl.c b/deps/glad/src/glad_egl.c
index e3cd1fc2..f2343b75 100644
--- a/deps/glad/src/glad_egl.c
+++ b/deps/glad/src/glad_egl.c
@@ -1,25 +1,28 @@
/*
- EGL loader generated by glad 0.1.33 on Mon Mar 9 17:01:26 2020.
+ EGL loader generated by glad 0.1.33 on Fri Mar 13 03:53:53 2020.
Language/Generator: C/C++
Specification: egl
APIs: egl=1.5
Profile: -
Extensions:
+ EGL_EXT_image_dma_buf_import,
+ EGL_EXT_image_dma_buf_import_modifiers,
EGL_EXT_platform_wayland,
EGL_EXT_platform_x11,
EGL_KHR_platform_wayland,
- EGL_KHR_platform_x11
+ EGL_KHR_platform_x11,
+ EGL_MESA_image_dma_buf_export
Loader: True
Local files: False
Omit khrplatform: False
Reproducible: False
Commandline:
- --api="egl=1.5" --generator="c" --spec="egl" --extensions="EGL_EXT_platform_wayland,EGL_EXT_platform_x11,EGL_KHR_platform_wayland,EGL_KHR_platform_x11"
+ --api="egl=1.5" --generator="c" --spec="egl" --extensions="EGL_EXT_image_dma_buf_import,EGL_EXT_image_dma_buf_import_modifiers,EGL_EXT_platform_wayland,EGL_EXT_platform_x11,EGL_KHR_platform_wayland,EGL_KHR_platform_x11,EGL_MESA_image_dma_buf_export"
Online:
- https://glad.dav1d.de/#language=c&specification=egl&loader=on&api=egl%3D1.5&extensions=EGL_EXT_platform_wayland&extensions=EGL_EXT_platform_x11&extensions=EGL_KHR_platform_wayland&extensions=EGL_KHR_platform_x11
+ https://glad.dav1d.de/#language=c&specification=egl&loader=on&api=egl%3D1.5&extensions=EGL_EXT_image_dma_buf_import&extensions=EGL_EXT_image_dma_buf_import_modifiers&extensions=EGL_EXT_platform_wayland&extensions=EGL_EXT_platform_x11&extensions=EGL_KHR_platform_wayland&extensions=EGL_KHR_platform_x11&extensions=EGL_MESA_image_dma_buf_export
*/
#include <stdio.h>
@@ -31,6 +34,18 @@ int gladLoadEGL(void) {
return gladLoadEGLLoader((GLADloadproc)eglGetProcAddress);
}
+PFNEGLQUERYDMABUFFORMATSEXTPROC glad_eglQueryDmaBufFormatsEXT = NULL;
+PFNEGLQUERYDMABUFMODIFIERSEXTPROC glad_eglQueryDmaBufModifiersEXT = NULL;
+PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC glad_eglExportDMABUFImageQueryMESA = NULL;
+PFNEGLEXPORTDMABUFIMAGEMESAPROC glad_eglExportDMABUFImageMESA = NULL;
+static void load_EGL_EXT_image_dma_buf_import_modifiers(GLADloadproc load) {
+ glad_eglQueryDmaBufFormatsEXT = (PFNEGLQUERYDMABUFFORMATSEXTPROC)load("eglQueryDmaBufFormatsEXT");
+ glad_eglQueryDmaBufModifiersEXT = (PFNEGLQUERYDMABUFMODIFIERSEXTPROC)load("eglQueryDmaBufModifiersEXT");
+}
+static void load_EGL_MESA_image_dma_buf_export(GLADloadproc load) {
+ glad_eglExportDMABUFImageQueryMESA = (PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC)load("eglExportDMABUFImageQueryMESA");
+ glad_eglExportDMABUFImageMESA = (PFNEGLEXPORTDMABUFIMAGEMESAPROC)load("eglExportDMABUFImageMESA");
+}
static int find_extensionsEGL(void) {
return 1;
}
@@ -43,6 +58,8 @@ int gladLoadEGLLoader(GLADloadproc load) {
find_coreEGL();
if (!find_extensionsEGL()) return 0;
+ load_EGL_EXT_image_dma_buf_import_modifiers(load);
+ load_EGL_MESA_image_dma_buf_export(load);
return 1;
}
--
2.28.0

View file

@ -0,0 +1,469 @@
From 8b047f19f5351382da17951a24923ca195fb5002 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Sat, 14 Mar 2020 14:26:02 -0300
Subject: [PATCH 23/24] libobs-opengl: Implement DMA-BUF importing on EGL
renderers
This is currently extremely limited. It only supports XRGB8888
DMA-BUFs for now, which seems to be a sensible default.
---
libobs-opengl/CMakeLists.txt | 1 +
libobs-opengl/gl-egl-common.c | 340 +++++++++++++++++++++++++++++++++
libobs-opengl/gl-egl-common.h | 14 ++
libobs-opengl/gl-wayland-egl.c | 18 +-
libobs-opengl/gl-x11-egl.c | 15 +-
5 files changed, 367 insertions(+), 21 deletions(-)
create mode 100644 libobs-opengl/gl-egl-common.c
create mode 100644 libobs-opengl/gl-egl-common.h
diff --git a/libobs-opengl/CMakeLists.txt b/libobs-opengl/CMakeLists.txt
index 0f694b6c..c434c65f 100644
--- a/libobs-opengl/CMakeLists.txt
+++ b/libobs-opengl/CMakeLists.txt
@@ -49,6 +49,7 @@ else()
${X11_XCB_LIBRARIES})
set(libobs-opengl_PLATFORM_SOURCES
+ gl-egl-common.c
gl-nix.c
gl-x11-egl.c
gl-x11-glx.c)
diff --git a/libobs-opengl/gl-egl-common.c b/libobs-opengl/gl-egl-common.c
new file mode 100644
index 00000000..8688af6b
--- /dev/null
+++ b/libobs-opengl/gl-egl-common.c
@@ -0,0 +1,340 @@
+/******************************************************************************
+ Copyright (C) 2020 by Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+#include "gl-egl-common.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <glad/glad_egl.h>
+
+#if defined(__linux__)
+
+#include <linux/types.h>
+#include <asm/ioctl.h>
+typedef unsigned int drm_handle_t;
+
+#else
+
+#include <stdint.h>
+#include <sys/ioccom.h>
+#include <sys/types.h>
+typedef int8_t __s8;
+typedef uint8_t __u8;
+typedef int16_t __s16;
+typedef uint16_t __u16;
+typedef int32_t __s32;
+typedef uint32_t __u32;
+typedef int64_t __s64;
+typedef uint64_t __u64;
+typedef size_t __kernel_size_t;
+typedef unsigned long drm_handle_t;
+
+#endif
+
+typedef void(APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)(
+ GLenum target, GLeglImageOES image);
+static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES;
+
+/* copied from drm_fourcc.h */
+
+#define fourcc_code(a, b, c, d) \
+ ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | \
+ ((__u32)(d) << 24))
+#define DRM_FORMAT_INVALID 0
+#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ') /* [7:0] R */
+#define DRM_FORMAT_R16 \
+ fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */
+#define DRM_FORMAT_RG88 \
+ fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 8:8 little endian */
+#define DRM_FORMAT_ABGR8888 \
+ fourcc_code('A', 'B', '2', \
+ '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */
+#define DRM_FORMAT_ABGR2101010 \
+ fourcc_code('A', 'B', '3', \
+ '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */
+#define DRM_FORMAT_ABGR16161616F \
+ fourcc_code('A', 'B', '4', \
+ 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */
+#define DRM_FORMAT_ARGB8888 \
+ fourcc_code('A', 'R', '2', \
+ '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */
+#define DRM_FORMAT_XRGB8888 \
+ fourcc_code('X', 'R', '2', \
+ '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */
+
+static bool find_gl_extension(const char *extension)
+{
+ GLint n, i;
+
+ glGetIntegerv(GL_NUM_EXTENSIONS, &n);
+ for (i = 0; i < n; i++) {
+ const char *e = (char *)glGetStringi(GL_EXTENSIONS, i);
+ if (extension && strcmp(e, extension) == 0)
+ return true;
+ }
+ return false;
+}
+
+static bool init_egl_image_target_texture_2d_ext(void)
+{
+ static bool initialized = false;
+
+ if (!initialized) {
+ initialized = true;
+
+ if (!find_gl_extension("GL_OES_EGL_image")) {
+ blog(LOG_ERROR, "No GL_OES_EGL_image");
+ return false;
+ }
+
+ glEGLImageTargetTexture2DOES =
+ (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)eglGetProcAddress(
+ "glEGLImageTargetTexture2DOES");
+ }
+
+ if (!glEGLImageTargetTexture2DOES)
+ return false;
+
+ return true;
+}
+
+static inline enum gs_color_format gs_format_to_drm_format(uint32_t drm_format)
+{
+ switch (drm_format) {
+ case GS_R8:
+ return DRM_FORMAT_R8;
+ case GS_RGBA:
+ return DRM_FORMAT_ABGR8888;
+ case GS_BGRX:
+ return DRM_FORMAT_XRGB8888;
+ case GS_BGRA:
+ return DRM_FORMAT_ARGB8888;
+ case GS_R10G10B10A2:
+ return DRM_FORMAT_ABGR2101010;
+ case GS_R16:
+ return DRM_FORMAT_R16;
+ case GS_RGBA16F:
+ return DRM_FORMAT_ABGR16161616F;
+ case GS_R8G8:
+ return DRM_FORMAT_RG88;
+ case GS_A8:
+ case GS_R16F:
+ case GS_RGBA16:
+ case GS_RG16F:
+ case GS_R32F:
+ case GS_RG32F:
+ case GS_RGBA32F:
+ case GS_DXT1:
+ case GS_DXT3:
+ case GS_DXT5:
+ case GS_UNKNOWN:
+ return DRM_FORMAT_INVALID;
+ }
+
+ return DRM_FORMAT_INVALID;
+}
+
+static EGLImageKHR
+create_dmabuf_egl_image(EGLDisplay egl_display, unsigned int width,
+ unsigned int height, uint32_t drm_format,
+ uint32_t n_planes, const int *fds,
+ const uint32_t *strides, const uint32_t *offsets,
+ const uint64_t *modifiers)
+{
+ EGLAttrib attribs[47];
+ int atti = 0;
+
+ /* This requires the Mesa commit in
+ * Mesa 10.3 (08264e5dad4df448e7718e782ad9077902089a07) or
+ * Mesa 10.2.7 (55d28925e6109a4afd61f109e845a8a51bd17652).
+ * Otherwise Mesa closes the fd behind our back and re-importing
+ * will fail.
+ * https://bugs.freedesktop.org/show_bug.cgi?id=76188
+ * */
+
+ attribs[atti++] = EGL_WIDTH;
+ attribs[atti++] = width;
+ attribs[atti++] = EGL_HEIGHT;
+ attribs[atti++] = height;
+ attribs[atti++] = EGL_LINUX_DRM_FOURCC_EXT;
+ attribs[atti++] = drm_format;
+
+ if (n_planes > 0) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT;
+ attribs[atti++] = fds[0];
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT;
+ attribs[atti++] = offsets[0];
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT;
+ attribs[atti++] = strides[0];
+ if (modifiers) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT;
+ attribs[atti++] = modifiers[0] & 0xFFFFFFFF;
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT;
+ attribs[atti++] = modifiers[0] >> 32;
+ }
+ }
+
+ if (n_planes > 1) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE1_FD_EXT;
+ attribs[atti++] = fds[1];
+ attribs[atti++] = EGL_DMA_BUF_PLANE1_OFFSET_EXT;
+ attribs[atti++] = offsets[1];
+ attribs[atti++] = EGL_DMA_BUF_PLANE1_PITCH_EXT;
+ attribs[atti++] = strides[1];
+ if (modifiers) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT;
+ attribs[atti++] = modifiers[1] & 0xFFFFFFFF;
+ attribs[atti++] = EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT;
+ attribs[atti++] = modifiers[1] >> 32;
+ }
+ }
+
+ if (n_planes > 2) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE2_FD_EXT;
+ attribs[atti++] = fds[2];
+ attribs[atti++] = EGL_DMA_BUF_PLANE2_OFFSET_EXT;
+ attribs[atti++] = offsets[2];
+ attribs[atti++] = EGL_DMA_BUF_PLANE2_PITCH_EXT;
+ attribs[atti++] = strides[2];
+ if (modifiers) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT;
+ attribs[atti++] = modifiers[2] & 0xFFFFFFFF;
+ attribs[atti++] = EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT;
+ attribs[atti++] = modifiers[2] >> 32;
+ }
+ }
+
+ if (n_planes > 3) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE3_FD_EXT;
+ attribs[atti++] = fds[3];
+ attribs[atti++] = EGL_DMA_BUF_PLANE3_OFFSET_EXT;
+ attribs[atti++] = offsets[3];
+ attribs[atti++] = EGL_DMA_BUF_PLANE3_PITCH_EXT;
+ attribs[atti++] = strides[3];
+ if (modifiers) {
+ attribs[atti++] = EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT;
+ attribs[atti++] = modifiers[3] & 0xFFFFFFFF;
+ attribs[atti++] = EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT;
+ attribs[atti++] = modifiers[3] >> 32;
+ }
+ }
+
+ attribs[atti++] = EGL_NONE;
+
+ return eglCreateImage(egl_display, EGL_NO_CONTEXT,
+ EGL_LINUX_DMA_BUF_EXT, 0, attribs);
+}
+
+struct gs_texture *
+gl_egl_create_dmabuf_image(EGLDisplay egl_display, unsigned int width,
+ unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes,
+ const int *fds, const uint32_t *strides,
+ const uint32_t *offsets, const uint64_t *modifiers)
+{
+ struct gs_texture *texture = NULL;
+ EGLImage egl_image;
+ uint32_t drm_format;
+
+ if (!init_egl_image_target_texture_2d_ext())
+ return NULL;
+
+ drm_format = gs_format_to_drm_format(color_format);
+ if (drm_format == DRM_FORMAT_INVALID) {
+ blog(LOG_ERROR, "Invalid or unsupported image format");
+ return NULL;
+ }
+
+ egl_image = create_dmabuf_egl_image(egl_display, width, height,
+ DRM_FORMAT_ARGB8888, n_planes, fds,
+ strides, offsets, modifiers);
+ if (egl_image == EGL_NO_IMAGE) {
+ blog(LOG_ERROR, "Cannot create EGLImage: %s",
+ gl_egl_error_to_string(eglGetError()));
+ return NULL;
+ }
+
+ texture = gs_texture_create(width, height, color_format, 1, NULL,
+ GS_DYNAMIC);
+ const GLuint gltex = *(GLuint *)gs_texture_get_obj(texture);
+
+ glBindTexture(GL_TEXTURE_2D, gltex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+
+ glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, egl_image);
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+ eglDestroyImage(egl_display, egl_image);
+
+ return texture;
+}
+
+const char *gl_egl_error_to_string(EGLint error_number)
+{
+ switch (error_number) {
+ case EGL_SUCCESS:
+ return "The last function succeeded without error.";
+ break;
+ case EGL_NOT_INITIALIZED:
+ return "EGL is not initialized, or could not be initialized, for the specified EGL display connection.";
+ break;
+ case EGL_BAD_ACCESS:
+ return "EGL cannot access a requested resource (for example a context is bound in another thread).";
+ break;
+ case EGL_BAD_ALLOC:
+ return "EGL failed to allocate resources for the requested operation.";
+ break;
+ case EGL_BAD_ATTRIBUTE:
+ return "An unrecognized attribute or attribute value was passed in the attribute list.";
+ break;
+ case EGL_BAD_CONTEXT:
+ return "An EGLContext argument does not name a valid EGL rendering context.";
+ break;
+ case EGL_BAD_CONFIG:
+ return "An EGLConfig argument does not name a valid EGL frame buffer configuration.";
+ break;
+ case EGL_BAD_CURRENT_SURFACE:
+ return "The current surface of the calling thread is a window, pixel buffer or pixmap that is no longer valid.";
+ break;
+ case EGL_BAD_DISPLAY:
+ return "An EGLDisplay argument does not name a valid EGL display connection.";
+ break;
+ case EGL_BAD_SURFACE:
+ return "An EGLSurface argument does not name a valid surface (window, pixel buffer or pixmap) configured for GL rendering.";
+ break;
+ case EGL_BAD_MATCH:
+ return "Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).";
+ break;
+ case EGL_BAD_PARAMETER:
+ return "One or more argument values are invalid.";
+ break;
+ case EGL_BAD_NATIVE_PIXMAP:
+ return "A NativePixmapType argument does not refer to a valid native pixmap.";
+ break;
+ case EGL_BAD_NATIVE_WINDOW:
+ return "A NativeWindowType argument does not refer to a valid native window.";
+ break;
+ case EGL_CONTEXT_LOST:
+ return "A power management event has occurred. The application must destroy all contexts and reinitialise OpenGL ES state and objects to continue rendering. ";
+ break;
+ default:
+ return "Unknown error";
+ break;
+ }
+}
diff --git a/libobs-opengl/gl-egl-common.h b/libobs-opengl/gl-egl-common.h
new file mode 100644
index 00000000..35811387
--- /dev/null
+++ b/libobs-opengl/gl-egl-common.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "gl-nix.h"
+
+#include <glad/glad_egl.h>
+
+const char *gl_egl_error_to_string(EGLint error_number);
+
+struct gs_texture *
+gl_egl_create_dmabuf_image(EGLDisplay egl_display, unsigned int width,
+ unsigned int height,
+ enum gs_color_format color_format, uint32_t n_planes,
+ const int *fds, const uint32_t *strides,
+ const uint32_t *offsets, const uint64_t *modifiers);
diff --git a/libobs-opengl/gl-wayland-egl.c b/libobs-opengl/gl-wayland-egl.c
index 3968736d..299fe7ea 100644
--- a/libobs-opengl/gl-wayland-egl.c
+++ b/libobs-opengl/gl-wayland-egl.c
@@ -17,6 +17,8 @@
#include "gl-wayland-egl.h"
+#include "gl-egl-common.h"
+
#include <wayland-client.h>
#include <wayland-egl.h>
@@ -325,17 +327,11 @@ static struct gs_texture *gl_wayland_egl_device_texture_create_from_dmabuf(
const uint32_t *strides, const uint32_t *offsets,
const uint64_t *modifiers)
{
- UNUSED_PARAMETER(device);
- UNUSED_PARAMETER(width);
- UNUSED_PARAMETER(height);
- UNUSED_PARAMETER(color_format);
- UNUSED_PARAMETER(n_planes);
- UNUSED_PARAMETER(fds);
- UNUSED_PARAMETER(strides);
- UNUSED_PARAMETER(offsets);
- UNUSED_PARAMETER(modifiers);
-
- return NULL;
+ struct gl_platform *plat = device->plat;
+
+ return gl_egl_create_dmabuf_image(plat->display, width, height,
+ color_format, n_planes, fds, strides,
+ offsets, modifiers);
}
static const struct gl_winsys_vtable egl_wayland_winsys_vtable = {
diff --git a/libobs-opengl/gl-x11-egl.c b/libobs-opengl/gl-x11-egl.c
index 7a9c5975..d56f6b71 100644
--- a/libobs-opengl/gl-x11-egl.c
+++ b/libobs-opengl/gl-x11-egl.c
@@ -29,6 +29,7 @@
#include <stdio.h>
+#include "gl-egl-common.h"
#include "gl-x11-egl.h"
#include <glad/glad_egl.h>
@@ -640,17 +641,11 @@ static struct gs_texture *gl_x11_egl_device_texture_create_from_dmabuf(
const uint32_t *strides, const uint32_t *offsets,
const uint64_t *modifiers)
{
- UNUSED_PARAMETER(device);
- UNUSED_PARAMETER(width);
- UNUSED_PARAMETER(height);
- UNUSED_PARAMETER(color_format);
- UNUSED_PARAMETER(n_planes);
- UNUSED_PARAMETER(fds);
- UNUSED_PARAMETER(strides);
- UNUSED_PARAMETER(offsets);
- UNUSED_PARAMETER(modifiers);
+ struct gl_platform *plat = device->plat;
- return NULL;
+ return gl_egl_create_dmabuf_image(plat->edisplay, width, height,
+ color_format, n_planes, fds, strides,
+ offsets, modifiers);
}
static const struct gl_winsys_vtable egl_x11_winsys_vtable = {
--
2.28.0

View file

@ -0,0 +1,40 @@
From c526b2ac87ce5cb26db187bbd612b90bb35605fa Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Fri, 28 Aug 2020 09:43:24 -0300
Subject: [PATCH 24/24] libobs-opengl: Create GLES2 contexts
They are required for importing DMA-BUF images.
---
libobs-opengl/gl-wayland-egl.c | 2 +-
libobs-opengl/gl-x11-egl.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/libobs-opengl/gl-wayland-egl.c b/libobs-opengl/gl-wayland-egl.c
index 299fe7ea..33352dfb 100644
--- a/libobs-opengl/gl-wayland-egl.c
+++ b/libobs-opengl/gl-wayland-egl.c
@@ -27,7 +27,7 @@
static const EGLint config_attribs[] = {EGL_SURFACE_TYPE,
EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE,
- EGL_OPENGL_BIT,
+ EGL_OPENGL_ES2_BIT,
EGL_STENCIL_SIZE,
0,
EGL_DEPTH_SIZE,
diff --git a/libobs-opengl/gl-x11-egl.c b/libobs-opengl/gl-x11-egl.c
index d56f6b71..40e6a7f8 100644
--- a/libobs-opengl/gl-x11-egl.c
+++ b/libobs-opengl/gl-x11-egl.c
@@ -62,7 +62,7 @@ static const EGLint ctx_config_attribs[] = {EGL_STENCIL_SIZE,
EGL_ALPHA_SIZE,
8,
EGL_RENDERABLE_TYPE,
- EGL_OPENGL_BIT,
+ EGL_OPENGL_ES2_BIT,
EGL_SURFACE_TYPE,
EGL_WINDOW_BIT | EGL_PBUFFER_BIT,
EGL_NONE};
--
2.28.0

View file

@ -7,7 +7,7 @@ pkgname=$_pkgname-wayland
provides=("$_pkgname") provides=("$_pkgname")
conflicts=("$_pkgname") conflicts=("$_pkgname")
pkgver=25.0.8 pkgver=25.0.8
pkgrel=4 pkgrel=5
pkgdesc="Free, open source software for live streaming and recording (with wayland patches)" pkgdesc="Free, open source software for live streaming and recording (with wayland patches)"
arch=('x86_64') arch=('x86_64')
url="https://obsproject.com" url="https://obsproject.com"
@ -46,29 +46,37 @@ source=(
0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch 0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch
0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch 0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch
0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch 0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch
0021-libobs-graphics-Add-Linux-only-device_texture_create.patch
0022-deps-glad-Add-DMA-BUF-EGL-extensions.patch
0023-libobs-opengl-Implement-DMA-BUF-importing-on-EGL-ren.patch
0024-libobs-opengl-Create-GLES2-contexts.patch
) )
sha512sums=('a97c03dc218a4e03e48f6a7dc82b4a59ebeee2039f17be66bb847681ce9ff3d25e6e015be4af78fe44739f6fad5089b6e683d7657c2e4fde8e547df9a2594a08' sha512sums=('a97c03dc218a4e03e48f6a7dc82b4a59ebeee2039f17be66bb847681ce9ff3d25e6e015be4af78fe44739f6fad5089b6e683d7657c2e4fde8e547df9a2594a08'
'1ff0e088eed61554268009f3d8c5a23c0888bfbe860d6cb288ddf348108446c152fd87e2cb8f54613a88378d8474550632c90f924005d5e0343bf1a801339ccc' '1ff0e088eed61554268009f3d8c5a23c0888bfbe860d6cb288ddf348108446c152fd87e2cb8f54613a88378d8474550632c90f924005d5e0343bf1a801339ccc'
'c322fb6dbe90bd3b9d298867731388ef306f3dbf038b2cb0f3f262c52981200ae949db6917b50c751b6920a40eef4b4fa8108ef5db9b83575ff3556024fa8f79' 'c4e653fc744000e0b178848b21f326065dbc83966876594fd349be9b847382afabd0321081e83f3ef094fe067c97d8200817a6cd752df260874bc943271a8658'
'78670b678538cc43cc484e377c14bce6a55cb36be00c8db485e1e084b6eafd1833cae376b1f618b329dd2c4d50fa1de53c6bf252932edce97253f4b19f229500' '2359bb8f074e5e5676eefe4c655d79611c901f0c8316275ced4d711be42f74ea29d0167ad018f51064fb8a51535969ae742c576a8afe9d710116f7379a1ee67d'
'9aaf118e233d6e7eda5f72b77eefedb641e11ddf0daff0463ae25cc4440de8e52903813215ec6bf33f82eb3c11febd166ce3859bfbe4044cd5e09a018ceb391c' '019fd92b51cb432d81d4265e85751040aeedc1f466181c2e2ec14c253335b1a23571e961ce6415e045fa51ea15731de6e540664276cdd76a3ce198d56cb13eac'
'662438ef6e95dc8262403c931c8a749a6204bf4857f76e6fccee5084dcbe2ca693309ca078170e25d13be1cfd4d4a8746cbfc318c473d0ea52b332adb5e90c61' '2f3186d862a78d41496e5a43dd01f5b56edac9873ea309bdcc8c9a83083437e7a252ef0d7373f403dc70ee4f1be8ae6fc430d710b80222ada7ae3ce16b8103ea'
'c2be03913d95f8f449c9c9df6df8be41956923baf28f30091dc9a836c9e37d4e84ee930730edf2d3cc162886809d3a42e0fd4d79fd84f27a77c9e08802de6947' '457534c7ffb7dd0064b143cdfe472d079251ebe891885372127cbff2b6cb70e7d1e55a2da7956c5b6d940e03f8efa57265453fa23a8fb9fa92e4b2c33c959316'
'9b4722003418f27cbe7efed102b1a69aeb1cb9782d4249b14a7a7f10d0bce725465bda459cfd77e0e577e93f46b2ca0604f48c9a3c19e4a7b0d31b3386f0a8cf' '2af83bba2aa2dd2aed11f9a4f431d9aaeae7c6154c921247510e91bb523cede756d0777fe522a5a6db81a9a6989769a839f365e698511890308c5a0ec6e695ec'
'854482e4dc52293b2b488988bc05fa1835346780aa0213e4e102ece971d630fadc33d5941424673050eed7b5aba017cebe3248e62f3fb69483f389bca7aede39' '3f8094c9e577d81bfc9222e436947aa890ce81b2f0e3e43f979a7192cc3e1ca35ca63949e061cecdc6be0579636b6a8e0d8ba21a05a0e11a94ba42210fff851a'
'8c5a049babe4804ab2b701591ab2ed9e597e974279431d728461807df5a37361164ce21b36d832017daa6e967bac545dc7c25f17433f4f6eef9c937da35ede34' 'd0ff4c1bcb156b2c81be38682d4f99b1388d25521f7981016e850f1e8989d0bfe0d3d71d4ec18382f861ca889bcdfb27dd4d73ca7f763f997a5e388bbc8bdcbc'
'5055c4bdd282743e7971be8eccce627eb0e1eb607bdf7f306748cd7898fcf08eaf64d870e753940682dac1691a6c959a539a032bae104b9d1a6fe4ca2e16187f' '061f7122d5ff8a98dd4ef875c2d7dc60a2dc30627a01a960bd78539e6c7f2bcbfda48f9f42f9f61434f6263686641af2cfb4d6971682be542b6c6f037986e6da'
'00b1909e225e479483fd1b23053dbff5630526d927e5df7eb9fe3c340f27bf343d64796ee66e37b4e7f3f6bab8649ad93fa76b6b2a4628e31b1894cab417f247' 'a91815239465656a0ab5902e524277659e0e3ab953d0539bc8ead8f65b3a279a801c02635aad541f871f5007943af704c8c64fec90534c66fe6e418d24787300'
'5b33e379d789ae1e17354a210531498765ee64773f0a457f505de480b10c9adfa9116e121e8a31757fbc0bc241c71fd9921ac796b7c4b038f4dea2cf0a04aa48' 'e3bdcdae93fa134c1174bf84152385ae28eb7fd82504331f4dccfd46b6565eb605b63acd4972bed08bbe765c7e213b93d94077a9fafcfe33064b4a526f02f7a6'
'b0b9d213d39cbcfdbb83f61352c8488b6a95d414f4299d6e7e729aa485f911d60ef4f047ca13d006dc77b1c43a7f49db381fec5c1e695e3ec9da0e6eab99bb61' 'f134c9fed318fde1d11f59e56676cc512bdea81df6a5ce90202759b300405d02981b6586e090cbae65fb730ca352c3942eeec636bb7d5a571475a815f73be89d'
'6dee9847d4d98704f393f1f788f2a0c22b630a3e4021846afa356ba2bb4be664e0b6e0f4b3ee2e58d889e7d33a90b516b91ad6bc6b2c241c22245be68ca098b7' '530846836b8efc6b7549fb6d2b4288ac9782420fd8e51c988d579f701bc4a1f58b7f941d472ad7d4ab07869e45dfc905c3927a3ad735178a109881ed02ffdb77'
'01953fc6cd1a5789a6fa5be076da53ba5e8f56418b9f2badca3af6221acf72107e4f73a06a082b20894fdd18aa5263668411d72f4ef237af81f3f2ed86a63be8' '014a9dd855e696a33e3b5c8f8a11ec6cf1edc6e0e6478cc5f11530c5535a1d1dfaaa75c5a3de258178e1ab16256fb8303b18c8a69407febe58a7d860b2396fda'
'e5ad79d67b15b5b245b8f06da0321d221d47aa91297b2c8a6c941c2a49b78e413edf3c6fac08bdcf573fa4cdf1632d8ba1b1ad5697ae67ece96b0fd1f4264a91' 'afb5a5b0cfa09407efe6924b37f8c3b26ccf244acc4a99fcee0eb6705855d2dc8589ecbdb2fcf9066c9ec6d947a6810f58efe34362aa451af4cdf7fa30f2e4e4'
'7b93c07e21efc66ef444db68e25b4f66e7b3acd111b70dc8c6c39a6ebcff29b3238a749693134a59d568757732c93a8c39f1624686161b967828f6ef267b4ac6' '5a09040d91bf293389c328f758416f29840eaf6b0acd78adf14b47fc48c417fb1b02ab97dc90c7d8381bc9ffa817cbc6acc83fd318ba85d73d39ae8f4f7a35e1'
'ff4e3e8b463a054df5a9b57b670971d2ba4dd4345e0cf7455d2d1d4dd8d911390533fdd42bfd027c3726a717e91ebb0cdf8855f47be065581179fa225f831d22' 'd1ed4b6bb07b2da105e2d69c5af1d61bcd39f141c2500e606f251f2220632f4173d3b3de9e2c88dd0bf2e230cba291cda50fb3a7ca89ff391d0e5e36b2e4aa2f'
'4fe456675224ab8692828ef022aae35899027ecbc98c70c47621e9b0e9839b332a5b1548736515ae09b3fcbe46ad17c35cd1338310d96e68db3337cc9dc2a2ee' 'c5b82ddaad7bcc5608168a318e6dde9a0aa0d1dc789d29751a9b22bec2b68288c71e5719c620073ee3c8d9bbf63d60e1634a351cc155b8f2b823d0cbc83cf578'
'e1358bdb7455aeae737c33a9180e225de288a25df16337ab2ed2a51e8ca6df66d89b863d1539a43a3c409b372a19cdbb5be37f842fc9320fb7046eabf69fcaba' 'c9d1e42cb87964b764a70044aa828c8d712c709d9e1245f644e8aa2f4576cd33c78e81b9b736d39939959aa3811fe4a9cb6970c8278c22d3f5b7f48d43ae1d55'
'cd3ab0c4c71e7c289732530dfb3230ebb35a4021335b3a0ad9bce5ec8c9ad352cb7b2fbb3ed1d6c5d7d9c32f27a90f5cfb2b1a00426def1f712d679da68f5795') 'a9893913797b503249d182ebbac0452827a837187e7817c46ab76df5d004ada810c2ff8523518d408daf396a4c72f707777a3dadeca598f404b074581f0125e8'
'848bcf4f525cca508131960fe6bb2757b0975065f680da9c8d692b5ea28b4c5cca7c2e71f1498c8425c0549fc23a41895638da9e1c433d05e6425ea36dc3ec1b'
'71e11ef607a0371c378db0d50155530d2a918ca47fe15dd29dab36f50dda4a8e7a487f3600b4b03a240db4e84b73c5b49186ca275fb1968de8f15c8d16e8a813'
'73b82cd530e26d3751de9d3e54da0994cbd5d7c9e5ceed7088d50ef4eda8a8c36d30812e8e4a82be014813ed09aefcfa14e7361189a7b4cf763f20aa2ebda7b7'
'1442f7918df45b37e9b3bef05573d4f8c7224f950a85fd0b6200a2ca70b377344ecf37ed69b5474453f584d0992b446383b1a708c326e993a9c815882ba4232f')
prepare() { prepare() {
cd $_pkgname-$pkgver cd $_pkgname-$pkgver