summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/state_trackers/egl/common/egl_g3d_api.c34
-rw-r--r--src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h4
-rw-r--r--src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.c34
-rw-r--r--src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr_helper.h5
-rw-r--r--src/gallium/state_trackers/egl/drm/native_drm.c3
-rw-r--r--src/gallium/state_trackers/egl/wayland/native_drm.c3
-rw-r--r--src/gallium/state_trackers/egl/x11/native_dri2.c3
7 files changed, 54 insertions, 32 deletions
diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
index a73859c0b9d..aaf7b10b1c7 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
@@ -39,10 +39,6 @@
#include "egl_g3d_st.h"
#include "native.h"
-#ifdef EGL_WL_bind_wayland_display
-#include <wayland-drm.h>
-#endif
-
/**
* Return the state tracker for the given context.
*/
@@ -879,36 +875,16 @@ egl_g3d_unbind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *dpy,
static EGLBoolean
egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
- struct wl_buffer *_buffer,
+ struct wl_buffer *buffer,
EGLint attribute, EGLint *value)
{
- struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
- struct pipe_resource *resource = buffer->driver_buffer;
+ struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
- if (!wayland_buffer_is_drm(&buffer->buffer))
+ if (!gdpy->native->wayland_bufmgr)
return EGL_FALSE;
- switch (attribute) {
- case EGL_TEXTURE_FORMAT:
- switch (resource->format) {
- case PIPE_FORMAT_B8G8R8A8_UNORM:
- *value = EGL_TEXTURE_RGBA;
- return EGL_TRUE;
- case PIPE_FORMAT_B8G8R8X8_UNORM:
- *value = EGL_TEXTURE_RGB;
- return EGL_TRUE;
- default:
- return EGL_FALSE;
- }
- case EGL_WIDTH:
- *value = buffer->buffer.width;
- return EGL_TRUE;
- case EGL_HEIGHT:
- *value = buffer->buffer.height;
- return EGL_TRUE;
- default:
- return EGL_FALSE;
- }
+ return gdpy->native->wayland_bufmgr->query_buffer(gdpy->native,
+ buffer, attribute, value);
}
#endif /* EGL_WL_bind_wayland_display */
diff --git a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
index b29fd15c1ae..3d9bda935c8 100644
--- a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
+++ b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
@@ -41,6 +41,10 @@ struct native_display_wayland_bufmgr {
struct pipe_resource *(*buffer_get_resource)(struct native_display *ndpy,
struct wl_buffer *buffer);
+
+ boolean (*query_buffer)(struct native_display *ndpy,
+ struct wl_buffer *buffer,
+ int attribute, int *value);
};
#endif /* _NATIVE_WAYLAND_BUFMGR_H_ */
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 c520b536483..43655530d84 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
@@ -69,4 +69,38 @@ egl_g3d_wl_drm_common_wl_buffer_get_resource(struct native_display *ndpy,
return wayland_drm_buffer_get_buffer(buffer);
}
+EGLBoolean
+egl_g3d_wl_drm_common_query_buffer(struct native_display *ndpy,
+ struct wl_buffer *_buffer,
+ EGLint attribute, EGLint *value)
+{
+ struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
+ struct pipe_resource *resource = buffer->driver_buffer;
+
+ if (!wayland_buffer_is_drm(&buffer->buffer))
+ return EGL_FALSE;
+
+ switch (attribute) {
+ case EGL_TEXTURE_FORMAT:
+ switch (resource->format) {
+ case PIPE_FORMAT_B8G8R8A8_UNORM:
+ *value = EGL_TEXTURE_RGBA;
+ return EGL_TRUE;
+ case PIPE_FORMAT_B8G8R8X8_UNORM:
+ *value = EGL_TEXTURE_RGB;
+ return EGL_TRUE;
+ default:
+ return EGL_FALSE;
+ }
+ case EGL_WIDTH:
+ *value = buffer->buffer.width;
+ return EGL_TRUE;
+ case EGL_HEIGHT:
+ *value = buffer->buffer.height;
+ return EGL_TRUE;
+ default:
+ return EGL_FALSE;
+ }
+}
+
#endif
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 e7a21717aeb..40c46e94d1f 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
@@ -40,4 +40,9 @@ struct pipe_resource *
egl_g3d_wl_drm_common_wl_buffer_get_resource(struct native_display *ndpy,
struct wl_buffer *buffer);
+EGLBoolean
+egl_g3d_wl_drm_common_query_buffer(struct native_display *ndpy,
+ struct wl_buffer *buffer,
+ EGLint attribute, EGLint *value);
+
#endif /* _NATIVE_WAYLAND_DRM_BUFMGR_HELPER_H_ */
diff --git a/src/gallium/state_trackers/egl/drm/native_drm.c b/src/gallium/state_trackers/egl/drm/native_drm.c
index 3c4c19f1c17..feb1dc045bf 100644
--- a/src/gallium/state_trackers/egl/drm/native_drm.c
+++ b/src/gallium/state_trackers/egl/drm/native_drm.c
@@ -240,7 +240,8 @@ drm_display_unbind_wayland_display(struct native_display *ndpy,
static struct native_display_wayland_bufmgr drm_display_wayland_bufmgr = {
drm_display_bind_wayland_display,
drm_display_unbind_wayland_display,
- egl_g3d_wl_drm_common_wl_buffer_get_resource
+ egl_g3d_wl_drm_common_wl_buffer_get_resource,
+ egl_g3d_wl_drm_common_query_buffer
};
#endif /* HAVE_WAYLAND_BACKEND */
diff --git a/src/gallium/state_trackers/egl/wayland/native_drm.c b/src/gallium/state_trackers/egl/wayland/native_drm.c
index e3bd628675e..006b3d507af 100644
--- a/src/gallium/state_trackers/egl/wayland/native_drm.c
+++ b/src/gallium/state_trackers/egl/wayland/native_drm.c
@@ -290,7 +290,8 @@ wayland_drm_display_unbind_wayland_display(struct native_display *ndpy,
static struct native_display_wayland_bufmgr wayland_drm_display_wayland_bufmgr = {
wayland_drm_display_bind_wayland_display,
wayland_drm_display_unbind_wayland_display,
- egl_g3d_wl_drm_common_wl_buffer_get_resource
+ egl_g3d_wl_drm_common_wl_buffer_get_resource,
+ egl_g3d_wl_drm_common_query_buffer
};
diff --git a/src/gallium/state_trackers/egl/x11/native_dri2.c b/src/gallium/state_trackers/egl/x11/native_dri2.c
index 5d7d3796e2b..70ae0f98443 100644
--- a/src/gallium/state_trackers/egl/x11/native_dri2.c
+++ b/src/gallium/state_trackers/egl/x11/native_dri2.c
@@ -890,7 +890,8 @@ dri2_display_unbind_wayland_display(struct native_display *ndpy,
static struct native_display_wayland_bufmgr dri2_display_wayland_bufmgr = {
dri2_display_bind_wayland_display,
dri2_display_unbind_wayland_display,
- egl_g3d_wl_drm_common_wl_buffer_get_resource
+ egl_g3d_wl_drm_common_wl_buffer_get_resource,
+ egl_g3d_wl_drm_common_query_buffer
};
#endif /* HAVE_WAYLAND_BACKEND */