[waffle] [PATCH] gbm: drop explicit linking against libgbm.so (v2)
Chad Versace
chad.versace at linux.intel.com
Tue Nov 11 22:03:37 PST 2014
From: Emil Velikov <emil.l.velikov at gmail.com>
Use the function pointers stored in wgbm_platform, to communicate
with the library.
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
---
v2(chadv): Fix numerous upcast errors of form:
src/waffle/gbm/wgbm_display.c: In function ‘wgbm_display_connect’:
src/waffle/gbm/wgbm_display.c:121:12: warning: passing argument 1 of ‘wgbm_platform’ from incompatible pointer type [enabled by default]
struct wgbm_platform *plat = wgbm_platform(wc_plat);
^
In file included from src/waffle/core/wcore_display.h:32:0,
from src/waffle/egl/wegl_display.h:33,
from src/waffle/gbm/wgbm_display.h:33,
from src/waffle/gbm/wgbm_display.c:39:
src/waffle/gbm/wgbm_platform.h:60:28: note: expected ‘struct wegl_platform *’ but argument is of type ‘struct wcore_platform *’
DEFINE_CONTAINER_CAST_FUNC(wgbm_platform,
^
src/waffle/core/wcore_util.h:44:5: note: in definition of macro ‘DEFINE_CONTAINER_CAST_FUNC’
func_name(member_type *member##_self) \
^
I fixed them by applying this hunk pattern to each occurrence of the warning:
- struct wgbm_platform *plat = wgbm_platform(wc_self->display->platform);
+ struct wcore_platform *wc_plat = wc_self->display->platform;
+ struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat));
For wgbm_window, this warning likely resulted in a real error, because the
address of wegl_window and wgbm_window differ. For reference, below is the
layout of wgbm_window:
struct wgbm_window {
struct gbm_surface *gbm_surface;
struct wegl_window wegl;
};
.../Modules/WafflePrintConfigurationSummary.cmake | 1 -
src/waffle/CMakeLists.txt | 1 -
src/waffle/gbm/wgbm_display.c | 11 ++++++-----
src/waffle/gbm/wgbm_window.c | 23 +++++++++++++---------
src/waffle/gbm/wgbm_window.h | 1 +
5 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/cmake/Modules/WafflePrintConfigurationSummary.cmake b/cmake/Modules/WafflePrintConfigurationSummary.cmake
index 79f7b38..81e738d 100644
--- a/cmake/Modules/WafflePrintConfigurationSummary.cmake
+++ b/cmake/Modules/WafflePrintConfigurationSummary.cmake
@@ -65,7 +65,6 @@ if(waffle_has_x11)
endif()
if(waffle_has_gbm)
message(" gbm_INCLUDE_DIRS: ${gbm_INCLUDE_DIRS}")
- message(" gbm_LDFLAGS: ${gbm_LDFLAGS}")
endif()
message("")
message("Build type:")
diff --git a/src/waffle/CMakeLists.txt b/src/waffle/CMakeLists.txt
index bf096b0..5d703f4 100644
--- a/src/waffle/CMakeLists.txt
+++ b/src/waffle/CMakeLists.txt
@@ -55,7 +55,6 @@ if(waffle_on_linux)
endif()
if(waffle_has_gbm)
list(APPEND waffle_libdeps
- ${gbm_LDFLAGS}
${libudev_LDFLAGS}
)
endif()
diff --git a/src/waffle/gbm/wgbm_display.c b/src/waffle/gbm/wgbm_display.c
index be5e83f..ae416d4 100644
--- a/src/waffle/gbm/wgbm_display.c
+++ b/src/waffle/gbm/wgbm_display.c
@@ -23,13 +23,11 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#define __GBM__ 1
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
-#include <gbm.h>
#include <libudev.h>
#include <fcntl.h>
#include <sys/types.h>
@@ -45,6 +43,8 @@ bool
wgbm_display_destroy(struct wcore_display *wc_self)
{
struct wgbm_display *self = wgbm_display(wc_self);
+ struct wcore_platform *wc_plat = wc_self->platform;
+ struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat));
bool ok = true;
int fd;
@@ -55,8 +55,8 @@ wgbm_display_destroy(struct wcore_display *wc_self)
ok &= wegl_display_teardown(&self->wegl);
if (self->gbm_device) {
- fd = gbm_device_get_fd(self->gbm_device);
- gbm_device_destroy(self->gbm_device);
+ fd = plat->gbm_device_get_fd(self->gbm_device);
+ plat->gbm_device_destroy(self->gbm_device);
close(fd);
}
@@ -119,6 +119,7 @@ wgbm_display_connect(struct wcore_platform *wc_plat,
const char *name)
{
struct wgbm_display *self;
+ struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat));
bool ok = true;
int fd;
@@ -137,7 +138,7 @@ wgbm_display_connect(struct wcore_platform *wc_plat,
goto error;
}
- self->gbm_device = gbm_create_device(fd);
+ self->gbm_device = plat->gbm_create_device(fd);
if (!self->gbm_device) {
wcore_errorf(WAFFLE_ERROR_UNKNOWN, "gbm_create_device failed");
goto error;
diff --git a/src/waffle/gbm/wgbm_window.c b/src/waffle/gbm/wgbm_window.c
index bce32a4..edac449 100644
--- a/src/waffle/gbm/wgbm_window.c
+++ b/src/waffle/gbm/wgbm_window.c
@@ -23,8 +23,6 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#define __GBM__ 1
-
#include <stdlib.h>
#include <string.h>
@@ -38,11 +36,14 @@
#include "wgbm_config.h"
#include "wgbm_display.h"
+#include "wgbm_platform.h"
#include "wgbm_window.h"
bool
wgbm_window_destroy(struct wcore_window *wc_self)
{
+ struct wcore_platform *wc_plat = wc_self->display->platform;
+ struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat));
struct wgbm_window *self = wgbm_window(wc_self);
bool ok = true;
@@ -50,7 +51,7 @@ wgbm_window_destroy(struct wcore_window *wc_self)
return ok;
ok &= wegl_window_teardown(&self->wegl);
- gbm_surface_destroy(self->gbm_surface);
+ plat->gbm_surface_destroy(self->gbm_surface);
free(self);
return ok;
}
@@ -61,8 +62,9 @@ wgbm_window_create(struct wcore_platform *wc_plat,
int width,
int height)
{
- struct wgbm_window *self;
struct wgbm_display *dpy = wgbm_display(wc_config->display);
+ struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat));
+ struct wgbm_window *self;
uint32_t gbm_format;
bool ok = true;
@@ -72,9 +74,9 @@ wgbm_window_create(struct wcore_platform *wc_plat,
gbm_format = wgbm_config_get_gbm_format(&wc_config->attrs);
assert(gbm_format != 0);
- self->gbm_surface = gbm_surface_create(dpy->gbm_device, width, height,
- gbm_format,
- GBM_BO_USE_RENDERING);
+ self->gbm_surface = plat->gbm_surface_create(dpy->gbm_device,
+ width, height, gbm_format,
+ GBM_BO_USE_RENDERING);
if (!self->gbm_surface) {
wcore_errorf(WAFFLE_ERROR_UNKNOWN,
"gbm_surface_create failed");
@@ -104,15 +106,18 @@ wgbm_window_show(struct wcore_window *wc_self)
bool
wgbm_window_swap_buffers(struct wcore_window *wc_self)
{
+ struct wcore_platform *wc_plat = wc_self->display->platform;
+ struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat));
+
if (!wegl_window_swap_buffers(wc_self))
return false;
struct wgbm_window *self = wgbm_window(wc_self);
- struct gbm_bo *bo = gbm_surface_lock_front_buffer(self->gbm_surface);
+ struct gbm_bo *bo = plat->gbm_surface_lock_front_buffer(self->gbm_surface);
if (!bo)
return false;
- gbm_surface_release_buffer(self->gbm_surface, bo);
+ plat->gbm_surface_release_buffer(self->gbm_surface, bo);
return true;
}
diff --git a/src/waffle/gbm/wgbm_window.h b/src/waffle/gbm/wgbm_window.h
index 0a895db..729612b 100644
--- a/src/waffle/gbm/wgbm_window.h
+++ b/src/waffle/gbm/wgbm_window.h
@@ -30,6 +30,7 @@
#include "wegl_window.h"
struct wcore_platform;
+struct gbm_surface;
struct wgbm_window {
struct gbm_surface *gbm_surface;
--
2.1.2.1.g5433a3e
More information about the waffle
mailing list