native.h revision af977b53826695afcdcfe900816a93671aec00f5
149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/*
249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Mesa 3-D graphics library
349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Version:  7.8
449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Copyright (C) 2009-2010 Chia-I Wu <olv@0xlab.org>
649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * copy of this software and associated documentation files (the "Software"),
949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * to deal in the Software without restriction, including without limitation
1049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the
1249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Software is furnished to do so, subject to the following conditions:
1349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
1449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * The above copyright notice and this permission notice shall be included
1549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * in all copies or substantial portions of the Software.
1649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
17ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * DEALINGS IN THE SOFTWARE.
2449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */
2549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
2649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#ifndef _NATIVE_H_
2749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#define _NATIVE_H_
2849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
2949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "EGL/egl.h"  /* for EGL native types */
3049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
3149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_compiler.h"
3249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_screen.h"
3349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_context.h"
3449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_state.h"
35d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu#include "state_tracker/sw_winsys.h"
3649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
37a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu#ifdef __cplusplus
38a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wuextern "C" {
39a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu#endif
40a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu
41af977b53826695afcdcfe900816a93671aec00f5Chia-I Wu#include "native_buffer.h"
4289a75b763467d83d4d402c91db55548682be14f0Chia-I Wu#include "native_modeset.h"
4389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
4449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/**
4549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Only color buffers are listed.  The others are allocated privately through,
4649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * for example, st_renderbuffer_alloc_storage().
4749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */
4849381d63e61c724b156b76068058df1c01a906c2Chia-I Wuenum native_attachment {
4949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   NATIVE_ATTACHMENT_FRONT_LEFT,
5049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   NATIVE_ATTACHMENT_BACK_LEFT,
5149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   NATIVE_ATTACHMENT_FRONT_RIGHT,
5249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   NATIVE_ATTACHMENT_BACK_RIGHT,
5349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
5449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   NUM_NATIVE_ATTACHMENTS
5549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu};
5649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
57fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wuenum native_param_type {
58fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu   /*
59fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu    * Return TRUE if window/pixmap surfaces use the buffers of the native
60fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu    * types.
61fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu    */
6294bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu   NATIVE_PARAM_USE_NATIVE_BUFFER,
6394bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu
6494bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu   /**
6594bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu    * Return TRUE if native_surface::present can preserve the buffer.
6694bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu    */
6794bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu   NATIVE_PARAM_PRESERVE_BUFFER,
6894bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu
6994bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu   /**
7094bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu    * Return the maximum supported swap interval.
7194bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu    */
7294bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu   NATIVE_PARAM_MAX_SWAP_INTERVAL
73fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu};
74fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu
7549381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_surface {
76e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu   /**
77e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu    * Available for caller's use.
78e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu    */
79e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu   void *user_data;
80e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu
8149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   void (*destroy)(struct native_surface *nsurf);
8249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
8349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   /**
8494bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu    * Present the given buffer to the native engine.
8594bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu    */
8694bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu   boolean (*present)(struct native_surface *nsurf,
8794bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu                      enum native_attachment natt,
8894bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu                      boolean preserve,
8994bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu                      uint swap_interval);
9094bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu
9194bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu   /**
92fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * Validate the buffers of the surface.  textures, if not NULL, points to an
93fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * array of size NUM_NATIVE_ATTACHMENTS and the returned textures are owned
94fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * by the caller.  A sequence number is also returned.  The caller can use
95fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * it to check if anything has changed since the last call. Any of the
96fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * pointers may be NULL and it indicates the caller has no interest in those
97fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * values.
981c1015bd53843a840a1fda6d2eb58d45da3e9fd0Chia-I Wu    *
99fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * If this function is called multiple times with different attachment
100fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * masks, those not listed in the latest call might be destroyed.  This
101fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu    * behavior might change in the future.
10249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu    */
103fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu   boolean (*validate)(struct native_surface *nsurf, uint attachment_mask,
104287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                       unsigned int *seq_num, struct pipe_resource **textures,
10549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu                       int *width, int *height);
10649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
10749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   /**
10849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu    * Wait until all native commands affecting the surface has been executed.
10949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu    */
11049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   void (*wait)(struct native_surface *nsurf);
11149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu};
11249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
113f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu/**
114f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu * Describe a native display config.
115f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu */
11649381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_config {
117f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   /* available buffers and their format */
118f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   uint buffer_mask;
11949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   enum pipe_format color_format;
120c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu
121f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   /* supported surface types */
122f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   boolean window_bit;
123f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   boolean pixmap_bit;
124c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu   boolean scanout_bit;
125f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu
126f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   int native_visual_id;
127f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   int native_visual_type;
128f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   int level;
129f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   int samples;
130f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   boolean slow_config;
131f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   boolean transparent_rgb;
132f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu   int transparent_rgb_values[3];
133c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu};
134c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu
13549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/**
13649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * A pipe winsys abstracts the OS.  A pipe screen abstracts the graphcis
13749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * hardware.  A native display consists of a pipe winsys, a pipe screen, and
13849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * the native display server.
13949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */
14049381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_display {
14151b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu   /**
14251b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu    * The pipe screen of the native display.
14351b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu    */
14449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   struct pipe_screen *screen;
14551b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu
146e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu   /**
147e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu    * Available for caller's use.
148e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu    */
149e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu   void *user_data;
150e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu
15149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   void (*destroy)(struct native_display *ndpy);
15249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
15349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   /**
154fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu    * Query the parameters of the native display.
155fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu    *
156fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu    * The return value is defined by the parameter.
157fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu    */
158fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu   int (*get_param)(struct native_display *ndpy,
159fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu                    enum native_param_type param);
160fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu
161fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu   /**
16249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu    * Get the supported configs.  The configs are owned by the display, but
163870a9d643b1f256e6a379d96a325284dd2f7eeeaChia-I Wu    * the returned array should be FREE()ed.
16449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu    */
16549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   const struct native_config **(*get_configs)(struct native_display *ndpy,
16649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu                                               int *num_configs);
16749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
16849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   /**
169f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu    * Test if a pixmap is supported by the given config.  Required unless no
170f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu    * config has pixmap_bit set.
171f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu    *
172f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu    * This function is usually called to find a config that supports a given
173f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu    * pixmap.  Thus, it is usually called with the same pixmap in a row.
174f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu    */
175f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu   boolean (*is_pixmap_supported)(struct native_display *ndpy,
176f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu                                  EGLNativePixmapType pix,
177f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu                                  const struct native_config *nconf);
178f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu
17949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
18049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   /**
181f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu    * Create a window surface.  Required unless no config has window_bit set.
18249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu    */
18349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   struct native_surface *(*create_window_surface)(struct native_display *ndpy,
18449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu                                                   EGLNativeWindowType win,
18549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu                                                   const struct native_config *nconf);
18649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
18749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   /**
188f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu    * Create a pixmap surface.  Required unless no config has pixmap_bit set.
18949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu    */
19049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   struct native_surface *(*create_pixmap_surface)(struct native_display *ndpy,
19149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu                                                   EGLNativePixmapType pix,
19249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu                                                   const struct native_config *nconf);
19349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
194af977b53826695afcdcfe900816a93671aec00f5Chia-I Wu   const struct native_display_buffer *buffer;
195c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu   const struct native_display_modeset *modeset;
196c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu};
19749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
198c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu/**
199e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * The handler for events that a native display may generate.  The events are
200e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * generated asynchronously and the handler may be called by any thread at any
201e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * time.
202c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu */
203e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wustruct native_event_handler {
204c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu   /**
205e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu    * This function is called when a surface needs to be validated.
206c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu    */
207e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu   void (*invalid_surface)(struct native_display *ndpy,
208e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu                           struct native_surface *nsurf,
209e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu                           unsigned int seq_num);
210d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu
211d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu   struct pipe_screen *(*new_drm_screen)(struct native_display *ndpy,
212d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu                                         const char *name, int fd);
213d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu   struct pipe_screen *(*new_sw_screen)(struct native_display *ndpy,
214d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu                                        struct sw_winsys *ws);
215c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu};
21649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
217fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu/**
218fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * Test whether an attachment is set in the mask.
219fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu */
220fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wustatic INLINE boolean
221fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wunative_attachment_mask_test(uint mask, enum native_attachment att)
222fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu{
223fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu   return !!(mask & (1 << att));
224fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu}
225fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu
226f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wustruct native_platform {
227f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu   const char *name;
22849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
229f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu   struct native_display *(*create_display)(void *dpy,
230d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu                                            struct native_event_handler *handler,
231d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu                                            void *user_data);
232f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu};
233f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu
234f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wuconst struct native_platform *
235ea05299ce54ea0463626277907cab8e849884740Chia-I Wunative_get_gdi_platform(void);
236ea05299ce54ea0463626277907cab8e849884740Chia-I Wu
237ea05299ce54ea0463626277907cab8e849884740Chia-I Wuconst struct native_platform *
238ea05299ce54ea0463626277907cab8e849884740Chia-I Wunative_get_x11_platform(void);
239ea05299ce54ea0463626277907cab8e849884740Chia-I Wu
240ea05299ce54ea0463626277907cab8e849884740Chia-I Wuconst struct native_platform *
241e7424d72405a1cb1fb5ac625b340043aaa9f88beChia-I Wunative_get_drm_platform(void);
242ea05299ce54ea0463626277907cab8e849884740Chia-I Wu
243ea05299ce54ea0463626277907cab8e849884740Chia-I Wuconst struct native_platform *
244ea05299ce54ea0463626277907cab8e849884740Chia-I Wunative_get_fbdev_platform(void);
24549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
246a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu#ifdef __cplusplus
247a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu}
248a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu#endif
249a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu
25049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#endif /* _NATIVE_H_ */
251