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" 43184bb09ff5cf2715dfee91e25ec20cbaa2e4445cBenjamin Franzke#include "native_wayland_bufmgr.h" 4489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu 4549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/** 4649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Only color buffers are listed. The others are allocated privately through, 4749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * for example, st_renderbuffer_alloc_storage(). 4849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 4949381d63e61c724b156b76068058df1c01a906c2Chia-I Wuenum native_attachment { 5049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_FRONT_LEFT, 5149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_BACK_LEFT, 5249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_FRONT_RIGHT, 5349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_BACK_RIGHT, 5449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 5549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NUM_NATIVE_ATTACHMENTS 5649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu}; 5749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 58fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wuenum native_param_type { 59fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu /* 60fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * Return TRUE if window/pixmap surfaces use the buffers of the native 61fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * types. 62fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu */ 6394bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu NATIVE_PARAM_USE_NATIVE_BUFFER, 6494bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu 6594bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu /** 6694bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu * Return TRUE if native_surface::present can preserve the buffer. 6794bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu */ 6894bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu NATIVE_PARAM_PRESERVE_BUFFER, 6994bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu 7094bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu /** 7194bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu * Return the maximum supported swap interval. 7294bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu */ 73f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu NATIVE_PARAM_MAX_SWAP_INTERVAL, 74f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu 75f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu /** 76f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu * Return TRUE if the display supports premultiplied alpha, regardless of 77f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu * the surface color format. 7841f5d2e8acbe3d6393f8012813609215534b5678Chia-I Wu * 7941f5d2e8acbe3d6393f8012813609215534b5678Chia-I Wu * Note that returning TRUE for this parameter will make 8041f5d2e8acbe3d6393f8012813609215534b5678Chia-I Wu * EGL_VG_ALPHA_FORMAT_PRE_BIT to be set for all EGLConfig's with non-zero 8141f5d2e8acbe3d6393f8012813609215534b5678Chia-I Wu * EGL_ALPHA_SIZE. EGL_VG_ALPHA_FORMAT attribute of a surface will affect 8241f5d2e8acbe3d6393f8012813609215534b5678Chia-I Wu * how the surface is presented. 83f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu */ 84fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund NATIVE_PARAM_PREMULTIPLIED_ALPHA, 85fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund 86fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund /** 87fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund * Return TRUE if native_surface::present supports presenting a partial 88fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund * surface. 89fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund */ 90fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund NATIVE_PARAM_PRESENT_REGION 91fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu}; 92fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu 9308e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu/** 9408e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu * Control how a surface presentation should happen. 9508e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu */ 9608e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wustruct native_present_control { 9708e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu /**< the attachment to present */ 9808e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu enum native_attachment natt; 9908e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu 10008e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu /**< the contents of the presented attachment should be preserved */ 10108e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu boolean preserve; 10208e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu 10308e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu /**< wait until the given vsyncs has passed since the last presentation */ 10408e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu uint swap_interval; 105f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu 106f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu /**< pixels use premultiplied alpha */ 107f4c37d6ab256f860a755fe69dfea5fb8df217a2fChia-I Wu boolean premultiplied_alpha; 108fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund 109fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund /**< The region to present. y=0=top. 110fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund If num_rects is 0, the whole surface is to be presented */ 111fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund int num_rects; 112fa0f70e45ed1b69c0e72588a061bc30fd9ad371eFredrik Höglund const int *rects; /* x, y, width, height */ 11308e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu}; 11408e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu 11549381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_surface { 116e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu /** 117e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * Available for caller's use. 118e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu */ 119e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu void *user_data; 120e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu 12149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu void (*destroy)(struct native_surface *nsurf); 12249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 12349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 12494bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu * Present the given buffer to the native engine. 12594bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu */ 12694bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu boolean (*present)(struct native_surface *nsurf, 12708e1076fd2d3f6fb879dd2529e7d035d6a399da2Chia-I Wu const struct native_present_control *ctrl); 12894bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu 12994bf657b2390a1cb72d748047e5c7014e4bc1752Chia-I Wu /** 130fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * Validate the buffers of the surface. textures, if not NULL, points to an 131fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * array of size NUM_NATIVE_ATTACHMENTS and the returned textures are owned 132fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * by the caller. A sequence number is also returned. The caller can use 133fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * it to check if anything has changed since the last call. Any of the 134fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * pointers may be NULL and it indicates the caller has no interest in those 135fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * values. 1361c1015bd53843a840a1fda6d2eb58d45da3e9fd0Chia-I Wu * 137fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * If this function is called multiple times with different attachment 138fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * masks, those not listed in the latest call might be destroyed. This 139fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * behavior might change in the future. 14049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 141fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu boolean (*validate)(struct native_surface *nsurf, uint attachment_mask, 142287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell unsigned int *seq_num, struct pipe_resource **textures, 14349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu int *width, int *height); 14449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 14549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 14649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Wait until all native commands affecting the surface has been executed. 14749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 14849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu void (*wait)(struct native_surface *nsurf); 14949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu}; 15049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 151f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu/** 152f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu * Describe a native display config. 153f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu */ 15449381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_config { 155f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu /* available buffers and their format */ 156f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu uint buffer_mask; 15749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu enum pipe_format color_format; 158c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu 159f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu /* supported surface types */ 160f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu boolean window_bit; 161f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu boolean pixmap_bit; 162c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu boolean scanout_bit; 163f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu 164f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu int native_visual_id; 165f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu int native_visual_type; 166f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu int level; 167f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu boolean transparent_rgb; 168f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu int transparent_rgb_values[3]; 169c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu}; 170c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu 17149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/** 17249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * A pipe winsys abstracts the OS. A pipe screen abstracts the graphcis 17349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * hardware. A native display consists of a pipe winsys, a pipe screen, and 17449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * the native display server. 17549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 17649381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_display { 17751b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu /** 17851b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu * The pipe screen of the native display. 17951b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu */ 18049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu struct pipe_screen *screen; 18151b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu 182e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu /** 183d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom * Context used for copy operations. 184d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom */ 185d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom struct pipe_context *pipe; 186d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom 187d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom /** 188e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * Available for caller's use. 189e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu */ 190e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu void *user_data; 191e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu 19273df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu /** 19373df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu * Initialize and create the pipe screen. 19473df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu */ 19573df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu boolean (*init_screen)(struct native_display *ndpy); 19673df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu 19749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu void (*destroy)(struct native_display *ndpy); 19849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 19949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 200fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * Query the parameters of the native display. 201fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * 202fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * The return value is defined by the parameter. 203fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu */ 204fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu int (*get_param)(struct native_display *ndpy, 205fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu enum native_param_type param); 206fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu 207fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu /** 20849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Get the supported configs. The configs are owned by the display, but 209870a9d643b1f256e6a379d96a325284dd2f7eeeaChia-I Wu * the returned array should be FREE()ed. 21049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 21149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu const struct native_config **(*get_configs)(struct native_display *ndpy, 21249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu int *num_configs); 21349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 21449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 215a0ad339915d8b5fdbebe82678fc81cbf1ec6682bChia-I Wu * Get the color format of the pixmap. Required unless no config has 216a0ad339915d8b5fdbebe82678fc81cbf1ec6682bChia-I Wu * pixmap_bit set. 217f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu */ 218a0ad339915d8b5fdbebe82678fc81cbf1ec6682bChia-I Wu boolean (*get_pixmap_format)(struct native_display *ndpy, 219a0ad339915d8b5fdbebe82678fc81cbf1ec6682bChia-I Wu EGLNativePixmapType pix, 220a0ad339915d8b5fdbebe82678fc81cbf1ec6682bChia-I Wu enum pipe_format *format); 221f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu 2227c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu /** 2237c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu * Copy the contents of the resource to the pixmap's front-left attachment. 2247c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu * This is used to implement eglCopyBuffers. Required unless no config has 2257c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu * pixmap_bit set. 2267c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu */ 2277c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu boolean (*copy_to_pixmap)(struct native_display *ndpy, 2287c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu EGLNativePixmapType pix, 2297c4e9dcdceec1112c91206619fe8b0885be99a79Chia-I Wu struct pipe_resource *src); 23049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 23149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 232f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu * Create a window surface. Required unless no config has window_bit set. 23349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 23449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu struct native_surface *(*create_window_surface)(struct native_display *ndpy, 23549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu EGLNativeWindowType win, 23649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu const struct native_config *nconf); 23749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 23849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 239af767ee1133058bb24e2183e8bf2846424c96ee0Chia-I Wu * Create a pixmap surface. The native config may be NULL. In that case, a 240af767ee1133058bb24e2183e8bf2846424c96ee0Chia-I Wu * "best config" will be picked. Required unless no config has pixmap_bit 241af767ee1133058bb24e2183e8bf2846424c96ee0Chia-I Wu * set. 24249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 24349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu struct native_surface *(*create_pixmap_surface)(struct native_display *ndpy, 24449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu EGLNativePixmapType pix, 24549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu const struct native_config *nconf); 24649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 247af977b53826695afcdcfe900816a93671aec00f5Chia-I Wu const struct native_display_buffer *buffer; 248c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu const struct native_display_modeset *modeset; 249184bb09ff5cf2715dfee91e25ec20cbaa2e4445cBenjamin Franzke const struct native_display_wayland_bufmgr *wayland_bufmgr; 250c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu}; 25149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 252c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu/** 253e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * The handler for events that a native display may generate. The events are 254e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * generated asynchronously and the handler may be called by any thread at any 255e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * time. 256c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu */ 257e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wustruct native_event_handler { 258c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu /** 259e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * This function is called when a surface needs to be validated. 260c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu */ 261e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu void (*invalid_surface)(struct native_display *ndpy, 262e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu struct native_surface *nsurf, 263e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu unsigned int seq_num); 264d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu 265d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu struct pipe_screen *(*new_drm_screen)(struct native_display *ndpy, 266d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu const char *name, int fd); 267d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu struct pipe_screen *(*new_sw_screen)(struct native_display *ndpy, 268d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu struct sw_winsys *ws); 269737bd7367e5a99cf64ec4bfc4420e3380b60878fBenjamin Franzke 270737bd7367e5a99cf64ec4bfc4420e3380b60878fBenjamin Franzke struct pipe_resource *(*lookup_egl_image)(struct native_display *ndpy, 271737bd7367e5a99cf64ec4bfc4420e3380b60878fBenjamin Franzke void *egl_image); 272c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu}; 27349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 274fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu/** 275fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * Test whether an attachment is set in the mask. 276fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu */ 277fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wustatic INLINE boolean 278fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wunative_attachment_mask_test(uint mask, enum native_attachment att) 279fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu{ 280fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu return !!(mask & (1 << att)); 281fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu} 282fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu 283d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom/** 284d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom * Get the display copy context 285d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom */ 286d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstromstatic INLINE struct pipe_context * 287d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstromndpy_get_copy_context(struct native_display *ndpy) 288d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom{ 289d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom if (!ndpy->pipe) 290d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom ndpy->pipe = ndpy->screen->context_create(ndpy->screen, NULL); 291d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom return ndpy->pipe; 292d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom} 293d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom 294d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom/** 295d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom * Free display screen and context resources 296d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom */ 297d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstromstatic INLINE void 298d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstromndpy_uninit(struct native_display *ndpy) 299d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom{ 300d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom if (ndpy->pipe) 301d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom ndpy->pipe->destroy(ndpy->pipe); 302d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom if (ndpy->screen) 303d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom ndpy->screen->destroy(ndpy->screen); 304d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom} 305d1e4117355f1db6ff87c837df6212bf6168e98a0Thomas Hellstrom 306f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wustruct native_platform { 307f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu const char *name; 30849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 30973df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu /** 31073df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu * Create the native display and usually establish a connection to the 31173df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu * display server. 31273df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu * 31373df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu * No event should be generated at this stage. 31473df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu */ 31573df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu struct native_display *(*create_display)(void *dpy, boolean use_sw); 316f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu}; 317f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu 318f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wuconst struct native_platform * 31973df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wunative_get_gdi_platform(const struct native_event_handler *event_handler); 320ea05299ce54ea0463626277907cab8e849884740Chia-I Wu 321ea05299ce54ea0463626277907cab8e849884740Chia-I Wuconst struct native_platform * 32273df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wunative_get_x11_platform(const struct native_event_handler *event_handler); 323ea05299ce54ea0463626277907cab8e849884740Chia-I Wu 324ea05299ce54ea0463626277907cab8e849884740Chia-I Wuconst struct native_platform * 32573df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wunative_get_wayland_platform(const struct native_event_handler *event_handler); 326381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzke 327381ea0d67a6d84a34d23571c49bbf4339ffda364Benjamin Franzkeconst struct native_platform * 32873df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wunative_get_drm_platform(const struct native_event_handler *event_handler); 329ea05299ce54ea0463626277907cab8e849884740Chia-I Wu 330ea05299ce54ea0463626277907cab8e849884740Chia-I Wuconst struct native_platform * 33173df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wunative_get_fbdev_platform(const struct native_event_handler *event_handler); 33249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 33315418a850575b2a33132165605293ed835b4be53Chia-I Wuconst struct native_platform * 334a5f8d37be141fac5c4ac605163a552ac64324e15Chia-I Wunative_get_null_platform(const struct native_event_handler *event_handler); 335a5f8d37be141fac5c4ac605163a552ac64324e15Chia-I Wu 336a5f8d37be141fac5c4ac605163a552ac64324e15Chia-I Wuconst struct native_platform * 33715418a850575b2a33132165605293ed835b4be53Chia-I Wunative_get_android_platform(const struct native_event_handler *event_handler); 33815418a850575b2a33132165605293ed835b4be53Chia-I Wu 339a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu#ifdef __cplusplus 340a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu} 341a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu#endif 342a5f4338fc4f9b4500c5754de237f77549b3cedf8Chia-I Wu 34349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#endif /* _NATIVE_H_ */ 344