1381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke/* 2381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * Mesa 3-D graphics library 3381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * Version: 7.11 4381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * 5381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * Copyright (C) 2011 Benjamin Franzke <benjaminfranzke@googlemail.com> 6381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * 7381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * Permission is hereby granted, free of charge, to any person obtaining a 8381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * copy of this software and associated documentation files (the "Software"), 9381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * to deal in the Software without restriction, including without limitation 10381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * and/or sell copies of the Software, and to permit persons to whom the 12381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * Software is furnished to do so, subject to the following conditions: 13381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * 14381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * The above copyright notice and this permission notice shall be included 15381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * in all copies or substantial portions of the Software. 16381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * 17381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke * DEALINGS IN THE SOFTWARE. 24381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke */ 25381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 26381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#ifndef _NATIVE_WAYLAND_H_ 27381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#define _NATIVE_WAYLAND_H_ 28381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 29381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#include "pipe/p_compiler.h" 30381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#include "pipe/p_format.h" 31381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 32381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#include "common/native.h" 33381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#include "common/native_helper.h" 34381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 35381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#include "wayland-egl-priv.h" 3634fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzke 3734fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzkestruct wayland_surface; 38381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 391191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzkeenum wayland_format_flag { 4058dc1b28d1ef4d1931c52b079d304f2e1546329dKristian Høgsberg HAS_ARGB8888 = (1 << 0), 4158dc1b28d1ef4d1931c52b079d304f2e1546329dKristian Høgsberg HAS_XRGB8888 = (1 << 1) 421191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzke}; 431191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzke 44381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkestruct wayland_display { 45381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke struct native_display base; 46381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 47400a99a679dfcf671d6d35cc4256d86cad7f9e93Benjamin Franzke struct wl_display *dpy; 48a5776ac0b8c015bf5d6a8513cefec5920895cc8eKristian Høgsberg struct wl_event_queue *queue; 49a5776ac0b8c015bf5d6a8513cefec5920895cc8eKristian Høgsberg struct wl_registry *registry; 50a23bf646bdeb72381e7f2bc784d47748cdd7d1ceBenjamin Franzke boolean own_dpy; 511191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzke /* supported formats */ 521191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzke uint32_t formats; 531191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzke 541191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzke struct wayland_config *configs; 551191d203632e2954ce59163f87c9896b1c6ed40aBenjamin Franzke int num_configs; 5634fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzke 5734fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzke struct wl_buffer *(*create_buffer)(struct wayland_display *display, 5834fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzke struct wayland_surface *surface, 5934fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzke enum native_attachment attachment); 60381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke}; 61381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 62381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkeenum wayland_buffer_type { 63381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke WL_BUFFER_FRONT, 64381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke WL_BUFFER_BACK, 65381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke WL_BUFFER_COUNT 66381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke}; 67381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 68381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkeenum wayland_surface_type { 69381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke WL_WINDOW_SURFACE, 70381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke WL_PBUFFER_SURFACE 71381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke}; 72381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 73381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkestruct wayland_surface { 74381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke struct native_surface base; 75381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke struct wayland_display *display; 76381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 77381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke struct wl_egl_window *win; 78381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke enum wayland_surface_type type; 79381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke int dx, dy; 80381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke struct resource_surface *rsurf; 819f213f6a4af9d6b3663bd2fbd371fbec9f869c75Benjamin Franzke struct pipe_resource *pending_resource; 82381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke enum pipe_format color_format; 83381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 84381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke unsigned int sequence_number; 85381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke struct wl_buffer *buffer[WL_BUFFER_COUNT]; 86381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke unsigned int attachment_mask; 87381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 88a5776ac0b8c015bf5d6a8513cefec5920895cc8eKristian Høgsberg struct wl_callback *frame_callback; 897645c49e07b638de94f03d5f71fde397066a46eeBenjamin Franzke boolean premultiplied_alpha; 90381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke}; 91381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 92381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkestruct wayland_config { 9334fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzke struct native_config base; 94381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke}; 95381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 96381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkestatic INLINE struct wayland_display * 97381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkewayland_display(const struct native_display *ndpy) 98381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke{ 99381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke return (struct wayland_display *) ndpy; 100381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke} 101381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 102381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkestatic INLINE struct wayland_surface * 103381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkewayland_surface(const struct native_surface *nsurf) 104381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke{ 105381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke return (struct wayland_surface *) nsurf; 106381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke} 107381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 108381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkestatic INLINE struct wayland_config * 109381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkewayland_config(const struct native_config *nconf) 110381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke{ 111381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke return (struct wayland_config *) nconf; 112381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke} 113381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 11434fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzkestruct wayland_display * 115d72e7f0dd95fdf28cf64c0b5b6d42c16f087008aBenjamin Franzkewayland_create_shm_display(struct wl_display *display, 11673df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu const struct native_event_handler *event_handler); 11773df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu 118d72e7f0dd95fdf28cf64c0b5b6d42c16f087008aBenjamin Franzkestruct wayland_display * 11934fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzkewayland_create_drm_display(struct wl_display *display, 12073df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu const struct native_event_handler *event_handler); 12134fd282b270dbaf0ce87e342b3183eb3a4bf4a44Benjamin Franzke 122a5776ac0b8c015bf5d6a8513cefec5920895cc8eKristian Høgsbergint 123a5776ac0b8c015bf5d6a8513cefec5920895cc8eKristian Høgsbergwayland_roundtrip(struct wayland_display *drmdpy); 124a5776ac0b8c015bf5d6a8513cefec5920895cc8eKristian Høgsberg 125381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke#endif /* _NATIVE_WAYLAND_H_ */ 126