summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-04-19 11:20:41 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-05-18 18:35:11 +0200
commit5c2a0bcf61c691d7e694f2f1a6130a6efad05ba8 (patch)
tree9db6faabcb8dcb7289411bfe79f2272492ec8d7a
parent8a269b38ce51b201dde95eb4b1acef792709c382 (diff)
wayland-drm: simplify wayland_drm_callbacks::reference_buffer().
Reference a buffer based on its layout and the specified layer.
-rw-r--r--src/egl/drivers/dri2/egl_dri2.c22
-rw-r--r--src/egl/wayland/wayland-drm/wayland-drm.c5
-rw-r--r--src/egl/wayland/wayland-drm/wayland-drm.h4
-rw-r--r--src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.c15
-rw-r--r--src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.h4
5 files changed, 28 insertions, 22 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 755fb49c8c..70a257bd2e 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -1312,20 +1312,24 @@ dri2_export_drm_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *img,
static void *
dri2_wl_reference_buffer(void *user_data, uint32_t name,
- int32_t width, int32_t height,
- uint32_t stride, uint32_t format)
+ const struct wl_buffer_layout *layout,
+ uint32_t plane_id)
{
_EGLDisplay *disp = user_data;
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
__DRIimageAttrs imageAttrs;
- int dri_format, cpp;
+ int dri_format, cpp, width, height, stride;
- switch (format) {
- case WL_DRM_FORMAT_ARGB8888:
- dri_format =__DRI_IMAGE_FORMAT_ARGB8888;
+ width = layout->width;
+ height = layout->height;
+ stride = layout->pitches[plane_id];
+
+ switch (layout->format) {
+ case WL_BUFFER_FORMAT_ARGB8888:
+ dri_format = __DRI_IMAGE_FORMAT_ARGB8888;
cpp = 4;
break;
- case WL_DRM_FORMAT_XRGB8888:
+ case WL_BUFFER_FORMAT_XRGB8888:
dri_format = __DRI_IMAGE_FORMAT_XRGB8888;
cpp = 4;
break;
@@ -1333,14 +1337,14 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name,
return NULL;
}
- imageAttrs.plane_id = 0;
+ imageAttrs.plane_id = plane_id;
imageAttrs.format = dri_format;
imageAttrs.width = width;
imageAttrs.height = height;
imageAttrs.pitch = stride / cpp;
imageAttrs.structure = __DRI_IMAGE_STRUCTURE_FRAME;
return dri2_invoke_create_image_from_name(dri2_dpy,
- name, 0,
+ name, layout->offsets[plane_id],
&imageAttrs, NULL);
}
diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c
index a7cf531736..b1dc3a2b5c 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.c
+++ b/src/egl/wayland/wayland-drm/wayland-drm.c
@@ -149,10 +149,7 @@ drm_do_create_buffer(struct wl_client *client, struct wl_resource *resource,
buffer->driver_buffer =
drm->callbacks->reference_buffer(drm->user_data, name,
- layout->width, layout->height,
- layout->pitches[0],
- layout->format);
-
+ layout, 0);
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 9df38cd80f..671c25849c 100644
--- a/src/egl/wayland/wayland-drm/wayland-drm.h
+++ b/src/egl/wayland/wayland-drm/wayland-drm.h
@@ -13,8 +13,8 @@ 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);
+ const struct wl_buffer_layout *layout,
+ uint32_t plane_id);
void (*release_buffer)(void *user_data, void *buffer);
};
diff --git a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.c b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.c
index 80b3f227d0..74e15bd6c9 100644
--- a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.c
+++ b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.c
@@ -14,19 +14,24 @@
void *
egl_g3d_wl_drm_helper_reference_buffer(void *user_data, uint32_t name,
- int32_t width, int32_t height,
- uint32_t stride, uint32_t format)
+ const struct wl_buffer_layout *layout,
+ uint32_t plane_id)
{
struct native_display *ndpy = user_data;
struct pipe_resource templ;
struct winsys_handle wsh;
enum pipe_format pf;
+ uint32_t width, height, stride;
- switch (format) {
- case WL_DRM_FORMAT_ARGB8888:
+ width = layout->width;
+ height = layout->height;
+ stride = layout->pitches[plane_id];
+
+ switch (layout->format) {
+ case WL_BUFFER_FORMAT_ARGB32:
pf = PIPE_FORMAT_B8G8R8A8_UNORM;
break;
- case WL_DRM_FORMAT_XRGB8888:
+ case WL_BUFFER_FORMAT_XRGB32:
pf = PIPE_FORMAT_B8G8R8X8_UNORM;
break;
default:
diff --git a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.h b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.h
index 6085875f09..6ddb762901 100644
--- a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.h
+++ b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.h
@@ -30,8 +30,8 @@
void *
egl_g3d_wl_drm_helper_reference_buffer(void *user_data, uint32_t name,
- int32_t width, int32_t height,
- uint32_t stride, uint32_t format);
+ const struct wl_buffer_layout *layout,
+ uint32_t plane_id);
void
egl_g3d_wl_drm_helper_unreference_buffer(void *user_data, void *buffer);