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