summaryrefslogtreecommitdiffstats
path: root/src/egl/wayland
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-07-05 14:19:48 -0400
committerKristian Høgsberg <krh@bitplanet.net>2012-07-11 15:28:35 -0400
commit379eb47ea61c87c9ac071fa6d93e49ae3f02ac2c (patch)
tree0edd148ee5870f6dae465edb0d4908c8326e2c16 /src/egl/wayland
parent95bc0527e9f81c62cbfe02dace94e73d9950d04d (diff)
downloadexternal_mesa3d-379eb47ea61c87c9ac071fa6d93e49ae3f02ac2c.zip
external_mesa3d-379eb47ea61c87c9ac071fa6d93e49ae3f02ac2c.tar.gz
external_mesa3d-379eb47ea61c87c9ac071fa6d93e49ae3f02ac2c.tar.bz2
wayland-drm: Pass struct wl_drm_buffer to the driver
We're going to extend this to support multi-plane buffers, so pass this to the driver so it can access the details.
Diffstat (limited to 'src/egl/wayland')
-rw-r--r--src/egl/wayland/wayland-drm/wayland-drm.c19
-rw-r--r--src/egl/wayland/wayland-drm/wayland-drm.h18
2 files changed, 18 insertions, 19 deletions
diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c
index 5f831b3..af176b7 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.c
+++ b/src/egl/wayland/wayland-drm/wayland-drm.c
@@ -56,22 +56,13 @@ struct wl_drm {
struct wayland_drm_callbacks *callbacks;
};
-struct wl_drm_buffer {
- struct wl_buffer buffer;
- struct wl_drm *drm;
- uint32_t format;
-
- void *driver_buffer;
-};
-
static void
destroy_buffer(struct wl_resource *resource)
{
struct wl_drm_buffer *buffer = resource->data;
struct wl_drm *drm = buffer->drm;
- drm->callbacks->release_buffer(drm->user_data,
- buffer->driver_buffer);
+ drm->callbacks->release_buffer(drm->user_data, buffer);
free(buffer);
}
@@ -129,12 +120,10 @@ drm_create_buffer(struct wl_client *client, struct wl_resource *resource,
buffer->buffer.width = width;
buffer->buffer.height = height;
buffer->format = format;
+ buffer->offset0 = 0;
+ buffer->stride0 = stride;
- buffer->driver_buffer =
- drm->callbacks->reference_buffer(drm->user_data, name,
- width, height,
- stride, format);
-
+ drm->callbacks->reference_buffer(drm->user_data, name, buffer);
if (buffer->driver_buffer == NULL) {
wl_resource_post_error(resource,
WL_DRM_ERROR_INVALID_NAME,
diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h b/src/egl/wayland/wayland-drm/wayland-drm.h
index bec50a5..f3df7ee 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.h
+++ b/src/egl/wayland/wayland-drm/wayland-drm.h
@@ -9,14 +9,24 @@
struct wl_drm;
+struct wl_drm_buffer {
+ struct wl_buffer buffer;
+ struct wl_drm *drm;
+ uint32_t format;
+ uint32_t driver_format;
+ int32_t offset0;
+ int32_t stride0;
+
+ void *driver_buffer;
+};
+
struct wayland_drm_callbacks {
int (*authenticate)(void *user_data, uint32_t id);
- void *(*reference_buffer)(void *user_data, uint32_t name,
- int32_t width, int32_t height,
- uint32_t stride, uint32_t format);
+ void (*reference_buffer)(void *user_data, uint32_t name,
+ struct wl_drm_buffer *buffer);
- void (*release_buffer)(void *user_data, void *buffer);
+ void (*release_buffer)(void *user_data, struct wl_drm_buffer *buffer);
};
struct wl_drm *