native.h revision 287c94ea4987033f9c99a2f91c5750c9083504ca
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#include "GL/gl.h" /* for GL types needed by __GLcontextModes */ 3149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "GL/internal/glcore.h" /* for __GLcontextModes */ 3249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 3349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_compiler.h" 3449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_screen.h" 3549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_context.h" 3649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "pipe/p_state.h" 3749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 38b80b817195d47984907f46ab74d5146e91bce4cfChia-I Wu#include "native_probe.h" 3989a75b763467d83d4d402c91db55548682be14f0Chia-I Wu#include "native_modeset.h" 4089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu 4149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/** 4249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Only color buffers are listed. The others are allocated privately through, 4349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * for example, st_renderbuffer_alloc_storage(). 4449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 4549381d63e61c724b156b76068058df1c01a906c2Chia-I Wuenum native_attachment { 4649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_FRONT_LEFT, 4749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_BACK_LEFT, 4849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_FRONT_RIGHT, 4949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NATIVE_ATTACHMENT_BACK_RIGHT, 5049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 5149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu NUM_NATIVE_ATTACHMENTS 5249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu}; 5349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 54fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wuenum native_param_type { 55fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu /* 56fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * Return TRUE if window/pixmap surfaces use the buffers of the native 57fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * types. 58fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu */ 59fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu NATIVE_PARAM_USE_NATIVE_BUFFER 60fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu}; 61fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu 6249381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_surface { 63e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu /** 64e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * Available for caller's use. 65e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu */ 66e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu void *user_data; 67e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu 6849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu void (*destroy)(struct native_surface *nsurf); 6949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 7049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 7149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Swap the front and back buffers so that the back buffer is visible. It 7249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * is no-op if the surface is single-buffered. The contents of the back 7349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * buffer after swapping may or may not be preserved. 7449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 7549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu boolean (*swap_buffers)(struct native_surface *nsurf); 7649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 7749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 7849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Make the front buffer visible. In some native displays, changes to the 7949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * front buffer might not be visible immediately and require manual flush. 8049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 8149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu boolean (*flush_frontbuffer)(struct native_surface *nsurf); 8249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 8349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 84fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * Validate the buffers of the surface. textures, if not NULL, points to an 85fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * array of size NUM_NATIVE_ATTACHMENTS and the returned textures are owned 86fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * by the caller. A sequence number is also returned. The caller can use 87fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * it to check if anything has changed since the last call. Any of the 88fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * pointers may be NULL and it indicates the caller has no interest in those 89fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * values. 901c1015bd53843a840a1fda6d2eb58d45da3e9fd0Chia-I Wu * 91fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * If this function is called multiple times with different attachment 92fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * masks, those not listed in the latest call might be destroyed. This 93fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * behavior might change in the future. 9449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 95fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu boolean (*validate)(struct native_surface *nsurf, uint attachment_mask, 96287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell unsigned int *seq_num, struct pipe_resource **textures, 9749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu int *width, int *height); 9849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 9949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 10049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Wait until all native commands affecting the surface has been executed. 10149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 10249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu void (*wait)(struct native_surface *nsurf); 10349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu}; 10449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 10549381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_config { 1061c1015bd53843a840a1fda6d2eb58d45da3e9fd0Chia-I Wu /* __GLcontextModes should go away some day */ 10749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu __GLcontextModes mode; 10849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu enum pipe_format color_format; 10949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu enum pipe_format depth_format; 11049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu enum pipe_format stencil_format; 111c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu 112c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu /* treat it as an additional flag to mode.drawableType */ 113c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu boolean scanout_bit; 114c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu}; 115c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu 11649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/** 11749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * A pipe winsys abstracts the OS. A pipe screen abstracts the graphcis 11849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * hardware. A native display consists of a pipe winsys, a pipe screen, and 11949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * the native display server. 12049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 12149381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_display { 12251b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu /** 12351b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu * The pipe screen of the native display. 12451b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu */ 12549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu struct pipe_screen *screen; 12651b00574a2ef81629548b079ef70c016bdd4251dChia-I Wu 127e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu /** 128e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * Available for caller's use. 129e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu */ 130e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu void *user_data; 131e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu 13249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu void (*destroy)(struct native_display *ndpy); 13349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 13449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 135fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * Query the parameters of the native display. 136fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * 137fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu * The return value is defined by the parameter. 138fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu */ 139fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu int (*get_param)(struct native_display *ndpy, 140fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu enum native_param_type param); 141fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu 142fade8a6eb639d633cfdbba4a3ba3aa3cc5c04fa6Chia-I Wu /** 14349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Get the supported configs. The configs are owned by the display, but 14449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * the returned array should be free()ed. 14549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * 14649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * The configs will be converted to EGL config by 14749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * _eglConfigFromContextModesRec and validated by _eglValidateConfig. 14849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Those failing to pass the test will be skipped. 14949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 15049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu const struct native_config **(*get_configs)(struct native_display *ndpy, 15149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu int *num_configs); 15249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 15349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 154f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu * Test if a pixmap is supported by the given config. Required unless no 155f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu * config has GLX_PIXMAP_BIT set. 156f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu * 157f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu * This function is usually called to find a config that supports a given 158f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu * pixmap. Thus, it is usually called with the same pixmap in a row. 159f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu */ 160f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu boolean (*is_pixmap_supported)(struct native_display *ndpy, 161f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu EGLNativePixmapType pix, 162f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu const struct native_config *nconf); 163f8244e294646c1b5127a2bf3e92811300b0e3b9eChia-I Wu 16449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 16549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 16649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Create a window surface. Required unless no config has GLX_WINDOW_BIT 16749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * set. 16849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 16949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu struct native_surface *(*create_window_surface)(struct native_display *ndpy, 17049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu EGLNativeWindowType win, 17149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu const struct native_config *nconf); 17249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 17349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu /** 17449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Create a pixmap surface. Required unless no config has GLX_PIXMAP_BIT 17549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * set. 17649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */ 17749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu struct native_surface *(*create_pixmap_surface)(struct native_display *ndpy, 17849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu EGLNativePixmapType pix, 17949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu const struct native_config *nconf); 18049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 181c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu const struct native_display_modeset *modeset; 182c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu}; 18349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 184c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu/** 185e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * The handler for events that a native display may generate. The events are 186e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * generated asynchronously and the handler may be called by any thread at any 187e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * time. 188c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu */ 189e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wustruct native_event_handler { 190c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu /** 191e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu * This function is called when a surface needs to be validated. 192c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu */ 193e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu void (*invalid_surface)(struct native_display *ndpy, 194e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu struct native_surface *nsurf, 195e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu unsigned int seq_num); 196c67ad0eee8f75e1fd65e8ab2fdd660dc132764eeChia-I Wu}; 19749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 198fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu/** 199fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu * Test whether an attachment is set in the mask. 200fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu */ 201fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wustatic INLINE boolean 202fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wunative_attachment_mask_test(uint mask, enum native_attachment att) 203fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu{ 204fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu return !!(mask & (1 << att)); 205fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu} 206fda897ad71738dd76a218280fd2e635d5dcdcee1Chia-I Wu 20749381d63e61c724b156b76068058df1c01a906c2Chia-I Wuconst char * 20849381d63e61c724b156b76068058df1c01a906c2Chia-I Wunative_get_name(void); 20949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 21049381d63e61c724b156b76068058df1c01a906c2Chia-I Wustruct native_display * 211e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wunative_create_display(EGLNativeDisplayType dpy, 212e38f28ddedd6d4902ae18b1bf243e67d4b16decbChia-I Wu struct native_event_handler *handler); 21349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu 21449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#endif /* _NATIVE_H_ */ 215