egl: Update to Wayland 1.2 server API
Since Wayland 1.2, struct wl_buffer and a few functions are deprecated. References to wl_buffer are replaced with wl_resource and some getter functions and calls to deprecated functions are replaced with the proper new API. The latter changes are related to resource versioning. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
This commit is contained in:
parent
602351dd58
commit
8d29b5271a
|
@ -17,7 +17,7 @@ Status
|
||||||
|
|
||||||
Version
|
Version
|
||||||
|
|
||||||
Version 1, March 1, 2011
|
Version 5, July 16, 2013
|
||||||
|
|
||||||
Number
|
Number
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ New Procedures and Functions
|
||||||
struct wl_display *display);
|
struct wl_display *display);
|
||||||
|
|
||||||
EGLBoolean eglQueryWaylandBufferWL(EGLDisplay dpy,
|
EGLBoolean eglQueryWaylandBufferWL(EGLDisplay dpy,
|
||||||
struct wl_buffer *buffer,
|
struct wl_resource *buffer,
|
||||||
EGLint attribute, EGLint *value);
|
EGLint attribute, EGLint *value);
|
||||||
|
|
||||||
New Tokens
|
New Tokens
|
||||||
|
@ -173,3 +173,7 @@ Revision History
|
||||||
Use EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB, and EGL_TEXTURE_RGBA,
|
Use EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB, and EGL_TEXTURE_RGBA,
|
||||||
and just define the new YUV texture formats. Add support for
|
and just define the new YUV texture formats. Add support for
|
||||||
EGL_WIDTH and EGL_HEIGHT in the query attributes (Kristian Høgsberg)
|
EGL_WIDTH and EGL_HEIGHT in the query attributes (Kristian Høgsberg)
|
||||||
|
Version 5, July 16, 2013
|
||||||
|
Change eglQueryWaylandBufferWL to take a resource pointer to the
|
||||||
|
buffer instead of a pointer to a struct wl_buffer, as the latter has
|
||||||
|
been deprecated. (Ander Conselvan de Oliveira)
|
||||||
|
|
|
@ -120,15 +120,15 @@ typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDRMDISPLAYMESA) (int fd);
|
||||||
#define EGL_TEXTURE_Y_XUXV_WL 0x31D9
|
#define EGL_TEXTURE_Y_XUXV_WL 0x31D9
|
||||||
|
|
||||||
struct wl_display;
|
struct wl_display;
|
||||||
struct wl_buffer;
|
struct wl_resource;
|
||||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||||
EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
|
EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
|
||||||
EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
|
EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
|
||||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
|
||||||
#endif
|
#endif
|
||||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
|
||||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
|
||||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,10 @@
|
||||||
|
|
||||||
#include "egl_dri2.h"
|
#include "egl_dri2.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_WAYLAND_PLATFORM
|
||||||
|
#include "wayland-drm.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
const __DRIuseInvalidateExtension use_invalidate = {
|
const __DRIuseInvalidateExtension use_invalidate = {
|
||||||
{ __DRI_USE_INVALIDATE, 1 }
|
{ __DRI_USE_INVALIDATE, 1 }
|
||||||
};
|
};
|
||||||
|
@ -1200,7 +1204,7 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||||
EGLClientBuffer _buffer,
|
EGLClientBuffer _buffer,
|
||||||
const EGLint *attr_list)
|
const EGLint *attr_list)
|
||||||
{
|
{
|
||||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
|
struct wl_drm_buffer *buffer;
|
||||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||||
const struct wl_drm_components_descriptor *f;
|
const struct wl_drm_components_descriptor *f;
|
||||||
__DRIimage *dri_image;
|
__DRIimage *dri_image;
|
||||||
|
@ -1208,7 +1212,8 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||||
EGLint err;
|
EGLint err;
|
||||||
int32_t plane;
|
int32_t plane;
|
||||||
|
|
||||||
if (!wayland_buffer_is_drm(&buffer->buffer))
|
buffer = wayland_drm_buffer_get((struct wl_resource *) _buffer);
|
||||||
|
if (!buffer)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
err = _eglParseImageAttribList(&attrs, disp, attr_list);
|
err = _eglParseImageAttribList(&attrs, disp, attr_list);
|
||||||
|
@ -1770,8 +1775,8 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd,
|
||||||
|
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen,
|
img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen,
|
||||||
buffer->buffer.width,
|
buffer->width,
|
||||||
buffer->buffer.height,
|
buffer->height,
|
||||||
buffer->format,
|
buffer->format,
|
||||||
(int*)&name, 1,
|
(int*)&name, 1,
|
||||||
buffer->stride,
|
buffer->stride,
|
||||||
|
@ -1779,8 +1784,8 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd,
|
||||||
NULL);
|
NULL);
|
||||||
else
|
else
|
||||||
img = dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen,
|
img = dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen,
|
||||||
buffer->buffer.width,
|
buffer->width,
|
||||||
buffer->buffer.height,
|
buffer->height,
|
||||||
buffer->format,
|
buffer->format,
|
||||||
&fd, 1,
|
&fd, 1,
|
||||||
buffer->stride,
|
buffer->stride,
|
||||||
|
@ -1869,13 +1874,14 @@ dri2_unbind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
||||||
|
|
||||||
static EGLBoolean
|
static EGLBoolean
|
||||||
dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
||||||
struct wl_buffer *_buffer,
|
struct wl_resource *buffer_resource,
|
||||||
EGLint attribute, EGLint *value)
|
EGLint attribute, EGLint *value)
|
||||||
{
|
{
|
||||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
|
struct wl_drm_buffer *buffer;
|
||||||
const struct wl_drm_components_descriptor *format;
|
const struct wl_drm_components_descriptor *format;
|
||||||
|
|
||||||
if (!wayland_buffer_is_drm(&buffer->buffer))
|
buffer = wayland_drm_buffer_get(buffer_resource);
|
||||||
|
if (!buffer)
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
||||||
format = buffer->driver_format;
|
format = buffer->driver_format;
|
||||||
|
@ -1884,10 +1890,10 @@ dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
||||||
*value = format->components;
|
*value = format->components;
|
||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
case EGL_WIDTH:
|
case EGL_WIDTH:
|
||||||
*value = buffer->buffer.width;
|
*value = buffer->width;
|
||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
case EGL_HEIGHT:
|
case EGL_HEIGHT:
|
||||||
*value = buffer->buffer.height;
|
*value = buffer->height;
|
||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND_PLATFORM
|
#ifdef HAVE_WAYLAND_PLATFORM
|
||||||
#include <wayland-client.h>
|
#include <wayland-client.h>
|
||||||
#include "wayland-drm.h"
|
|
||||||
#include "wayland-egl-priv.h"
|
#include "wayland-egl-priv.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1576,7 +1576,7 @@ eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display)
|
||||||
}
|
}
|
||||||
|
|
||||||
EGLBoolean EGLAPIENTRY
|
EGLBoolean EGLAPIENTRY
|
||||||
eglQueryWaylandBufferWL(EGLDisplay dpy,struct wl_buffer *buffer,
|
eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer,
|
||||||
EGLint attribute, EGLint *value)
|
EGLint attribute, EGLint *value)
|
||||||
{
|
{
|
||||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||||
|
|
|
@ -123,7 +123,7 @@ typedef EGLBoolean (*ExportDRMImageMESA_t)(_EGLDriver *drv, _EGLDisplay *disp, _
|
||||||
struct wl_display;
|
struct wl_display;
|
||||||
typedef EGLBoolean (*BindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display);
|
typedef EGLBoolean (*BindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display);
|
||||||
typedef EGLBoolean (*UnbindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display);
|
typedef EGLBoolean (*UnbindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display);
|
||||||
typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay *displ, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
|
typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay *displ, struct wl_resource *buffer, EGLint attribute, EGLint *value);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef EGLBoolean (*PostSubBufferNV_t)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surface, EGLint x, EGLint y, EGLint width, EGLint height);
|
typedef EGLBoolean (*PostSubBufferNV_t)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surface, EGLint x, EGLint y, EGLint width, EGLint height);
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
#include "wayland-drm.h"
|
#include "wayland-drm.h"
|
||||||
#include "wayland-drm-server-protocol.h"
|
#include "wayland-drm-server-protocol.h"
|
||||||
|
|
||||||
|
#define MIN(x,y) (((x)<(y))?(x):(y))
|
||||||
|
|
||||||
struct wl_drm {
|
struct wl_drm {
|
||||||
struct wl_display *display;
|
struct wl_display *display;
|
||||||
|
|
||||||
|
@ -86,8 +88,8 @@ create_buffer(struct wl_client *client, struct wl_resource *resource,
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer->drm = drm;
|
buffer->drm = drm;
|
||||||
buffer->buffer.width = width;
|
buffer->width = width;
|
||||||
buffer->buffer.height = height;
|
buffer->height = height;
|
||||||
buffer->format = format;
|
buffer->format = format;
|
||||||
buffer->offset[0] = offset0;
|
buffer->offset[0] = offset0;
|
||||||
buffer->stride[0] = stride0;
|
buffer->stride[0] = stride0;
|
||||||
|
@ -104,16 +106,17 @@ create_buffer(struct wl_client *client, struct wl_resource *resource,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer->buffer.resource.object.id = id;
|
buffer->resource =
|
||||||
buffer->buffer.resource.object.interface = &wl_buffer_interface;
|
wl_resource_create(client, &wl_buffer_interface, 1, id);
|
||||||
buffer->buffer.resource.object.implementation =
|
if (!buffer->resource) {
|
||||||
(void (**)(void)) &drm_buffer_interface;
|
wl_resource_post_no_memory(resource);
|
||||||
buffer->buffer.resource.data = buffer;
|
free(buffer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
buffer->buffer.resource.destroy = destroy_buffer;
|
wl_resource_set_implementation(buffer->resource,
|
||||||
buffer->buffer.resource.client = resource->client;
|
(void (**)(void)) &drm_buffer_interface,
|
||||||
|
buffer, destroy_buffer);
|
||||||
wl_client_add_resource(resource->client, &buffer->buffer.resource);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -208,8 +211,15 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id)
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
uint32_t capabilities;
|
uint32_t capabilities;
|
||||||
|
|
||||||
resource = wl_client_add_object(client, &wl_drm_interface,
|
resource = wl_resource_create(client, &wl_drm_interface,
|
||||||
&drm_interface, id, data);
|
MIN(version, 2), id);
|
||||||
|
if (!resource) {
|
||||||
|
wl_client_post_no_memory(client);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_resource_set_implementation(resource, &drm_interface, data, NULL);
|
||||||
|
|
||||||
wl_resource_post_event(resource, WL_DRM_DEVICE, drm->device_name);
|
wl_resource_post_event(resource, WL_DRM_DEVICE, drm->device_name);
|
||||||
wl_resource_post_event(resource, WL_DRM_FORMAT,
|
wl_resource_post_event(resource, WL_DRM_FORMAT,
|
||||||
WL_DRM_FORMAT_ARGB8888);
|
WL_DRM_FORMAT_ARGB8888);
|
||||||
|
@ -232,6 +242,19 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id)
|
||||||
wl_resource_post_event(resource, WL_DRM_CAPABILITIES, capabilities);
|
wl_resource_post_event(resource, WL_DRM_CAPABILITIES, capabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct wl_drm_buffer *
|
||||||
|
wayland_drm_buffer_get(struct wl_resource *resource)
|
||||||
|
{
|
||||||
|
if (resource == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (wl_resource_instance_of(resource, &wl_buffer_interface,
|
||||||
|
&drm_buffer_interface))
|
||||||
|
return wl_resource_get_user_data(resource);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
struct wl_drm *
|
struct wl_drm *
|
||||||
wayland_drm_init(struct wl_display *display, char *device_name,
|
wayland_drm_init(struct wl_display *display, char *device_name,
|
||||||
struct wayland_drm_callbacks *callbacks, void *user_data,
|
struct wayland_drm_callbacks *callbacks, void *user_data,
|
||||||
|
@ -247,7 +270,7 @@ wayland_drm_init(struct wl_display *display, char *device_name,
|
||||||
drm->user_data = user_data;
|
drm->user_data = user_data;
|
||||||
drm->flags = flags;
|
drm->flags = flags;
|
||||||
|
|
||||||
wl_display_add_global(display, &wl_drm_interface, drm, bind_drm);
|
wl_global_create(display, &wl_drm_interface, 2, drm, bind_drm);
|
||||||
|
|
||||||
return drm;
|
return drm;
|
||||||
}
|
}
|
||||||
|
@ -262,25 +285,14 @@ wayland_drm_uninit(struct wl_drm *drm)
|
||||||
free(drm);
|
free(drm);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
wayland_buffer_is_drm(struct wl_buffer *buffer)
|
|
||||||
{
|
|
||||||
return buffer->resource.object.implementation ==
|
|
||||||
(void (**)(void)) &drm_buffer_interface;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
wayland_drm_buffer_get_format(struct wl_buffer *buffer_base)
|
wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer)
|
||||||
{
|
{
|
||||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) buffer_base;
|
|
||||||
|
|
||||||
return buffer->format;
|
return buffer->format;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
wayland_drm_buffer_get_buffer(struct wl_buffer *buffer_base)
|
wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer)
|
||||||
{
|
{
|
||||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) buffer_base;
|
|
||||||
|
|
||||||
return buffer->driver_buffer;
|
return buffer->driver_buffer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,8 +70,9 @@ enum wl_drm_format {
|
||||||
struct wl_drm;
|
struct wl_drm;
|
||||||
|
|
||||||
struct wl_drm_buffer {
|
struct wl_drm_buffer {
|
||||||
struct wl_buffer buffer;
|
struct wl_resource *resource;
|
||||||
struct wl_drm *drm;
|
struct wl_drm *drm;
|
||||||
|
int32_t width, height;
|
||||||
uint32_t format;
|
uint32_t format;
|
||||||
const void *driver_format;
|
const void *driver_format;
|
||||||
int32_t offset[3];
|
int32_t offset[3];
|
||||||
|
@ -90,6 +91,9 @@ struct wayland_drm_callbacks {
|
||||||
|
|
||||||
enum { WAYLAND_DRM_PRIME = 0x01 };
|
enum { WAYLAND_DRM_PRIME = 0x01 };
|
||||||
|
|
||||||
|
struct wl_drm_buffer *
|
||||||
|
wayland_drm_buffer_get(struct wl_resource *resource);
|
||||||
|
|
||||||
struct wl_drm *
|
struct wl_drm *
|
||||||
wayland_drm_init(struct wl_display *display, char *device_name,
|
wayland_drm_init(struct wl_display *display, char *device_name,
|
||||||
struct wayland_drm_callbacks *callbacks, void *user_data,
|
struct wayland_drm_callbacks *callbacks, void *user_data,
|
||||||
|
@ -98,13 +102,10 @@ wayland_drm_init(struct wl_display *display, char *device_name,
|
||||||
void
|
void
|
||||||
wayland_drm_uninit(struct wl_drm *drm);
|
wayland_drm_uninit(struct wl_drm *drm);
|
||||||
|
|
||||||
int
|
|
||||||
wayland_buffer_is_drm(struct wl_buffer *buffer);
|
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
wayland_drm_buffer_get_format(struct wl_buffer *buffer_base);
|
wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer);
|
||||||
|
|
||||||
void *
|
void *
|
||||||
wayland_drm_buffer_get_buffer(struct wl_buffer *buffer);
|
wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -874,7 +874,7 @@ egl_g3d_unbind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *dpy,
|
||||||
|
|
||||||
static EGLBoolean
|
static EGLBoolean
|
||||||
egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
|
egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
|
||||||
struct wl_buffer *buffer,
|
struct wl_resource *buffer,
|
||||||
EGLint attribute, EGLint *value)
|
EGLint attribute, EGLint *value)
|
||||||
{
|
{
|
||||||
struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
|
struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
|
||||||
|
|
|
@ -183,7 +183,7 @@ egl_g3d_reference_drm_buffer(_EGLDisplay *dpy, EGLint name,
|
||||||
#ifdef EGL_WL_bind_wayland_display
|
#ifdef EGL_WL_bind_wayland_display
|
||||||
|
|
||||||
static struct pipe_resource *
|
static struct pipe_resource *
|
||||||
egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_buffer *buffer,
|
egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_resource *buffer,
|
||||||
_EGLImage *img, const EGLint *attribs)
|
_EGLImage *img, const EGLint *attribs)
|
||||||
{
|
{
|
||||||
struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
|
struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
|
||||||
|
@ -253,7 +253,7 @@ egl_g3d_create_image(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx,
|
||||||
#ifdef EGL_WL_bind_wayland_display
|
#ifdef EGL_WL_bind_wayland_display
|
||||||
case EGL_WAYLAND_BUFFER_WL:
|
case EGL_WAYLAND_BUFFER_WL:
|
||||||
ptex = egl_g3d_reference_wl_buffer(dpy,
|
ptex = egl_g3d_reference_wl_buffer(dpy,
|
||||||
(struct wl_buffer *) buffer, &gimg->base, attribs);
|
(struct wl_resource *) buffer, &gimg->base, attribs);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef EGL_ANDROID_image_native_buffer
|
#ifdef EGL_ANDROID_image_native_buffer
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
struct native_display;
|
struct native_display;
|
||||||
struct wl_display;
|
struct wl_display;
|
||||||
struct wl_buffer;
|
struct wl_resource;
|
||||||
struct pipe_resource;
|
struct pipe_resource;
|
||||||
|
|
||||||
struct native_display_wayland_bufmgr {
|
struct native_display_wayland_bufmgr {
|
||||||
|
@ -38,11 +38,11 @@ struct native_display_wayland_bufmgr {
|
||||||
struct wl_display *wl_dpy);
|
struct wl_display *wl_dpy);
|
||||||
|
|
||||||
struct pipe_resource *(*buffer_get_resource)(struct native_display *ndpy,
|
struct pipe_resource *(*buffer_get_resource)(struct native_display *ndpy,
|
||||||
struct wl_buffer *buffer);
|
struct wl_resource *buffer);
|
||||||
|
|
||||||
|
|
||||||
boolean (*query_buffer)(struct native_display *ndpy,
|
boolean (*query_buffer)(struct native_display *ndpy,
|
||||||
struct wl_buffer *buffer,
|
struct wl_resource *buffer,
|
||||||
int attribute, int *value);
|
int attribute, int *value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -70,8 +70,8 @@ wayland_drm_bufmgr_reference_buffer(void *user_data, uint32_t name, int fd,
|
||||||
templ.target = PIPE_TEXTURE_2D;
|
templ.target = PIPE_TEXTURE_2D;
|
||||||
templ.format = pf;
|
templ.format = pf;
|
||||||
templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
|
templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
|
||||||
templ.width0 = buffer->buffer.width;
|
templ.width0 = buffer->width;
|
||||||
templ.height0 = buffer->buffer.height;
|
templ.height0 = buffer->height;
|
||||||
templ.depth0 = 1;
|
templ.depth0 = 1;
|
||||||
templ.array_size = 1;
|
templ.array_size = 1;
|
||||||
|
|
||||||
|
@ -137,22 +137,29 @@ wayland_drm_bufmgr_unbind_display(struct native_display *ndpy,
|
||||||
|
|
||||||
static struct pipe_resource *
|
static struct pipe_resource *
|
||||||
wayland_drm_bufmgr_wl_buffer_get_resource(struct native_display *ndpy,
|
wayland_drm_bufmgr_wl_buffer_get_resource(struct native_display *ndpy,
|
||||||
struct wl_buffer *buffer)
|
struct wl_resource *buffer_resource)
|
||||||
{
|
{
|
||||||
|
struct wl_drm_buffer *buffer = wayland_drm_buffer_get(buffer_resource);
|
||||||
|
|
||||||
|
if (!buffer)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
return wayland_drm_buffer_get_buffer(buffer);
|
return wayland_drm_buffer_get_buffer(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static EGLBoolean
|
static EGLBoolean
|
||||||
wayland_drm_bufmgr_query_buffer(struct native_display *ndpy,
|
wayland_drm_bufmgr_query_buffer(struct native_display *ndpy,
|
||||||
struct wl_buffer *_buffer,
|
struct wl_resource *buffer_resource,
|
||||||
EGLint attribute, EGLint *value)
|
EGLint attribute, EGLint *value)
|
||||||
{
|
{
|
||||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
|
struct wl_drm_buffer *buffer = wayland_drm_buffer_get(buffer_resource);
|
||||||
struct pipe_resource *resource = buffer->driver_buffer;
|
struct pipe_resource *resource;
|
||||||
|
|
||||||
if (!wayland_buffer_is_drm(&buffer->buffer))
|
if (!buffer)
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
||||||
|
resource = buffer->driver_buffer;
|
||||||
|
|
||||||
switch (attribute) {
|
switch (attribute) {
|
||||||
case EGL_TEXTURE_FORMAT:
|
case EGL_TEXTURE_FORMAT:
|
||||||
switch (resource->format) {
|
switch (resource->format) {
|
||||||
|
@ -166,10 +173,10 @@ wayland_drm_bufmgr_query_buffer(struct native_display *ndpy,
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
}
|
}
|
||||||
case EGL_WIDTH:
|
case EGL_WIDTH:
|
||||||
*value = buffer->buffer.width;
|
*value = buffer->width;
|
||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
case EGL_HEIGHT:
|
case EGL_HEIGHT:
|
||||||
*value = buffer->buffer.height;
|
*value = buffer->height;
|
||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
default:
|
default:
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
|
@ -374,9 +374,10 @@ gbm_dri_bo_import(struct gbm_device *gbm,
|
||||||
#if HAVE_WAYLAND_PLATFORM
|
#if HAVE_WAYLAND_PLATFORM
|
||||||
case GBM_BO_IMPORT_WL_BUFFER:
|
case GBM_BO_IMPORT_WL_BUFFER:
|
||||||
{
|
{
|
||||||
struct wl_drm_buffer *wb = (struct wl_drm_buffer *) buffer;
|
struct wl_drm_buffer *wb;
|
||||||
|
|
||||||
if (!wayland_buffer_is_drm(buffer))
|
wb = wayland_drm_buffer_get((struct wl_resource *) buffer);
|
||||||
|
if (!wb)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
image = wb->driver_buffer;
|
image = wb->driver_buffer;
|
||||||
|
|
Loading…
Reference in New Issue