native_wayland.h revision d72e7f0dd95fdf28cf64c0b5b6d42c16f087008a
1ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov/*
2ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * Mesa 3-D graphics library
3ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * Version:  7.11
4ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov *
5ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * Copyright (C) 2011 Benjamin Franzke <benjaminfranzke@googlemail.com>
6ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov *
7ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * Permission is hereby granted, free of charge, to any person obtaining a
8ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * copy of this software and associated documentation files (the "Software"),
9ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * to deal in the Software without restriction, including without limitation
10ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * and/or sell copies of the Software, and to permit persons to whom the
12ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * Software is furnished to do so, subject to the following conditions:
13ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov *
14ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * The above copyright notice and this permission notice shall be included
15ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * in all copies or substantial portions of the Software.
16ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov *
17ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1839dd5aafb0a92536a8872ac4a9c39a56442c8023Alexey Samsonov * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov * DEALINGS IN THE SOFTWARE.
24ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov */
25ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
26ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#ifndef _NATIVE_WAYLAND_H_
27a0bd5df0867e054b9740bc734325cdeabfe3825aAlexey Samsonov#define _NATIVE_WAYLAND_H_
28ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
29ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#include "pipe/p_compiler.h"
30ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#include "pipe/p_format.h"
31ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
32ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#include "common/native.h"
33ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#include "common/native_helper.h"
34ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
35ab4d569f2841beaf6152179b1f4da6b7e0f3530eHans Wennborg#include "wayland-egl-priv.h"
36ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
37ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovstruct wayland_surface;
38ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
39ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovstruct wayland_display {
40ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct native_display base;
41ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
42ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct wayland_config *config;
43ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct wl_display *dpy;
44ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
45ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct wl_buffer *(*create_buffer)(struct wayland_display *display,
46ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov                                      struct wayland_surface *surface,
47ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov                                      enum native_attachment attachment);
48ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov};
49ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
50ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovenum wayland_buffer_type {
51ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   WL_BUFFER_FRONT,
52ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   WL_BUFFER_BACK,
53ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   WL_BUFFER_COUNT
54ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov};
55ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
56ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovenum wayland_surface_type {
57ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   WL_WINDOW_SURFACE,
58ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   WL_PIXMAP_SURFACE,
5939dd5aafb0a92536a8872ac4a9c39a56442c8023Alexey Samsonov   WL_PBUFFER_SURFACE
60ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov};
61ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
6239dd5aafb0a92536a8872ac4a9c39a56442c8023Alexey Samsonovstruct wayland_surface {
63a1aabcd98714737f1b1c30c889f5943f1770752bAlexey Samsonov   struct native_surface base;
6439dd5aafb0a92536a8872ac4a9c39a56442c8023Alexey Samsonov   struct wayland_display *display;
65ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
66ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct wl_egl_window *win;
67ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct wl_egl_pixmap *pix;
68ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   enum wayland_surface_type type;
69ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   int dx, dy;
70ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct resource_surface *rsurf;
71ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct pipe_resource *pending_resource;
72ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   enum pipe_format color_format;
73ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
74ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   unsigned int sequence_number;
7539dd5aafb0a92536a8872ac4a9c39a56442c8023Alexey Samsonov   struct wl_buffer *buffer[WL_BUFFER_COUNT];
76ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   unsigned int attachment_mask;
77ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
7839dd5aafb0a92536a8872ac4a9c39a56442c8023Alexey Samsonov   boolean block_swap_buffers;
79a1aabcd98714737f1b1c30c889f5943f1770752bAlexey Samsonov};
8039dd5aafb0a92536a8872ac4a9c39a56442c8023Alexey Samsonov
81ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovstruct wayland_config {
82ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   struct native_config base;
83ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov};
84ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonov
85ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonovstatic INLINE struct wayland_display *
86ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonovwayland_display(const struct native_display *ndpy)
87ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonov{
88ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   return (struct wayland_display *) ndpy;
89ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov}
90ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
91ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovstatic INLINE struct wayland_surface *
92ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovwayland_surface(const struct native_surface *nsurf)
93ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov{
94ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov   return (struct wayland_surface *) nsurf;
95ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov}
96ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
97ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovstatic INLINE struct wayland_config *
98ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovwayland_config(const struct native_config *nconf)
99ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov{
100ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonov   return (struct wayland_config *) nconf;
101ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonov}
102ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonov
103ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovstruct wayland_display *
104ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovwayland_create_shm_display(struct wl_display *display,
105                           struct native_event_handler *event_handler,
106                           void *user_data);
107struct wayland_display *
108wayland_create_drm_display(struct wl_display *display,
109                           struct native_event_handler *event_handler,
110                           void *user_data);
111
112#endif /* _NATIVE_WAYLAND_H_ */
113