Re: [Mesa-dev] [PATCH 2/2] wayland-drm: constify the callbacks struct, take 2

2017-09-27 Thread Derek Foreman

On 2017-09-27 01:49 PM, Emil Velikov wrote:

From: Emil Velikov 

Now that wayland-drm (correctly) keeps a local copy of the callbacks,
this should not longer cause explosions.

After all the symbol is a local, constant data.

Cc: Daniel Stone 
Cc: Derek Foreman 
Signed-off-by: Emil Velikov 
---
Derek, can you please check the series on your end.

I've ran this through wayland (xwayland and drm) + mpv and the simple
weston demos (simple-egl, simple-damage, flowers, smoke, editor)


of the weston demos, I think only simple-egl is actually an egl user, 
but thanks for being thorough. :)


The series looks good to me, and functions well in my testing too.

Tested-by: Derek Foreman 


---
  src/egl/drivers/dri2/egl_dri2.c   | 14 +-
  src/egl/wayland/wayland-drm/wayland-drm.c |  2 +-
  src/egl/wayland/wayland-drm/wayland-drm.h |  2 +-
  3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index adcaae0bab7..a0e8b0be5b0 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -2730,17 +2730,16 @@ dri2_wl_release_buffer(void *user_data, struct 
wl_drm_buffer *buffer)
 dri2_dpy->image->destroyImage(buffer->driver_buffer);
  }
  
-static struct wayland_drm_callbacks wl_drm_callbacks = {

-.authenticate = NULL,
-.reference_buffer = dri2_wl_reference_buffer,
-.release_buffer = dri2_wl_release_buffer
-};
-
  static EGLBoolean
  dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
   struct wl_display *wl_dpy)
  {
 struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
+   const struct wayland_drm_callbacks wl_drm_callbacks = {
+  .authenticate = (int(*)(void *, uint32_t)) dri2_dpy->vtbl->authenticate,
+  .reference_buffer = dri2_wl_reference_buffer,
+  .release_buffer = dri2_wl_release_buffer
+   };
 int flags = 0;
 uint64_t cap;
  
@@ -2749,9 +2748,6 @@ dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,

 if (dri2_dpy->wl_server_drm)
 return EGL_FALSE;
  
-   wl_drm_callbacks.authenticate =

-  (int(*)(void *, uint32_t)) dri2_dpy->vtbl->authenticate;
-
 if (drmGetCap(dri2_dpy->fd, DRM_CAP_PRIME, ) == 0 &&
 cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT) &&
 dri2_dpy->image->base.version >= 7 &&
diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c 
b/src/egl/wayland/wayland-drm/wayland-drm.c
index 0f0a2317c7e..73dfba9600e 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.c
+++ b/src/egl/wayland/wayland-drm/wayland-drm.c
@@ -259,7 +259,7 @@ wayland_drm_buffer_get(struct wl_drm *drm, struct 
wl_resource *resource)
  
  struct wl_drm *

  wayland_drm_init(struct wl_display *display, char *device_name,
- struct wayland_drm_callbacks *callbacks, void *user_data,
+ const struct wayland_drm_callbacks *callbacks, void 
*user_data,
   uint32_t flags)
  {
struct wl_drm *drm;
diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h 
b/src/egl/wayland/wayland-drm/wayland-drm.h
index 77e8d273042..111383ff1d6 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.h
+++ b/src/egl/wayland/wayland-drm/wayland-drm.h
@@ -34,7 +34,7 @@ wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource 
*resource);
  
  struct wl_drm *

  wayland_drm_init(struct wl_display *display, char *device_name,
-struct wayland_drm_callbacks *callbacks, void *user_data,
+const struct wayland_drm_callbacks *callbacks, void *user_data,
   uint32_t flags);
  
  void




___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/2] wayland-drm: constify the callbacks struct, take 2

2017-09-27 Thread Emil Velikov
From: Emil Velikov 

Now that wayland-drm (correctly) keeps a local copy of the callbacks,
this should not longer cause explosions.

After all the symbol is a local, constant data.

Cc: Daniel Stone 
Cc: Derek Foreman 
Signed-off-by: Emil Velikov 
---
Derek, can you please check the series on your end.

I've ran this through wayland (xwayland and drm) + mpv and the simple
weston demos (simple-egl, simple-damage, flowers, smoke, editor)
---
 src/egl/drivers/dri2/egl_dri2.c   | 14 +-
 src/egl/wayland/wayland-drm/wayland-drm.c |  2 +-
 src/egl/wayland/wayland-drm/wayland-drm.h |  2 +-
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index adcaae0bab7..a0e8b0be5b0 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -2730,17 +2730,16 @@ dri2_wl_release_buffer(void *user_data, struct 
wl_drm_buffer *buffer)
dri2_dpy->image->destroyImage(buffer->driver_buffer);
 }
 
-static struct wayland_drm_callbacks wl_drm_callbacks = {
-.authenticate = NULL,
-.reference_buffer = dri2_wl_reference_buffer,
-.release_buffer = dri2_wl_release_buffer
-};
-
 static EGLBoolean
 dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
  struct wl_display *wl_dpy)
 {
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
+   const struct wayland_drm_callbacks wl_drm_callbacks = {
+  .authenticate = (int(*)(void *, uint32_t)) dri2_dpy->vtbl->authenticate,
+  .reference_buffer = dri2_wl_reference_buffer,
+  .release_buffer = dri2_wl_release_buffer
+   };
int flags = 0;
uint64_t cap;
 
@@ -2749,9 +2748,6 @@ dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay 
*disp,
if (dri2_dpy->wl_server_drm)
return EGL_FALSE;
 
-   wl_drm_callbacks.authenticate =
-  (int(*)(void *, uint32_t)) dri2_dpy->vtbl->authenticate;
-
if (drmGetCap(dri2_dpy->fd, DRM_CAP_PRIME, ) == 0 &&
cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT) &&
dri2_dpy->image->base.version >= 7 &&
diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c 
b/src/egl/wayland/wayland-drm/wayland-drm.c
index 0f0a2317c7e..73dfba9600e 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.c
+++ b/src/egl/wayland/wayland-drm/wayland-drm.c
@@ -259,7 +259,7 @@ wayland_drm_buffer_get(struct wl_drm *drm, struct 
wl_resource *resource)
 
 struct wl_drm *
 wayland_drm_init(struct wl_display *display, char *device_name,
- struct wayland_drm_callbacks *callbacks, void *user_data,
+ const struct wayland_drm_callbacks *callbacks, void 
*user_data,
  uint32_t flags)
 {
struct wl_drm *drm;
diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h 
b/src/egl/wayland/wayland-drm/wayland-drm.h
index 77e8d273042..111383ff1d6 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.h
+++ b/src/egl/wayland/wayland-drm/wayland-drm.h
@@ -34,7 +34,7 @@ wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource 
*resource);
 
 struct wl_drm *
 wayland_drm_init(struct wl_display *display, char *device_name,
-struct wayland_drm_callbacks *callbacks, void *user_data,
+const struct wayland_drm_callbacks *callbacks, void *user_data,
  uint32_t flags);
 
 void
-- 
2.14.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev