1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Permission to use, copy, modify, distribute, and sell this software and its 3*61046927SAndroid Build Coastguard Worker * documentation for any purpose is hereby granted without fee, provided that 4*61046927SAndroid Build Coastguard Worker * the above copyright notice appear in all copies and that both that copyright 5*61046927SAndroid Build Coastguard Worker * notice and this permission notice appear in supporting documentation, and 6*61046927SAndroid Build Coastguard Worker * that the name of the copyright holders not be used in advertising or 7*61046927SAndroid Build Coastguard Worker * publicity pertaining to distribution of the software without specific, 8*61046927SAndroid Build Coastguard Worker * written prior permission. The copyright holders make no representations 9*61046927SAndroid Build Coastguard Worker * about the suitability of this software for any purpose. It is provided "as 10*61046927SAndroid Build Coastguard Worker * is" without express or implied warranty. 11*61046927SAndroid Build Coastguard Worker * 12*61046927SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 13*61046927SAndroid Build Coastguard Worker * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 14*61046927SAndroid Build Coastguard Worker * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 15*61046927SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 16*61046927SAndroid Build Coastguard Worker * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 17*61046927SAndroid Build Coastguard Worker * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 18*61046927SAndroid Build Coastguard Worker * OF THIS SOFTWARE. 19*61046927SAndroid Build Coastguard Worker */ 20*61046927SAndroid Build Coastguard Worker 21*61046927SAndroid Build Coastguard Worker #ifndef LOADER_DRI_HELPER_H 22*61046927SAndroid Build Coastguard Worker #define LOADER_DRI_HELPER_H 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker #include <stdbool.h> 25*61046927SAndroid Build Coastguard Worker #include <sys/types.h> 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker #include <GL/gl.h> /* mesa_interface needs GL types */ 28*61046927SAndroid Build Coastguard Worker #include "mesa_interface.h" 29*61046927SAndroid Build Coastguard Worker #include <c11/threads.h> 30*61046927SAndroid Build Coastguard Worker #include "util/format/u_formats.h" 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Worker #ifdef HAVE_X11_PLATFORM 33*61046927SAndroid Build Coastguard Worker #include <xcb/xcb.h> 34*61046927SAndroid Build Coastguard Worker #include <xcb/dri3.h> 35*61046927SAndroid Build Coastguard Worker #include <xcb/present.h> 36*61046927SAndroid Build Coastguard Worker 37*61046927SAndroid Build Coastguard Worker struct loader_crtc_info { 38*61046927SAndroid Build Coastguard Worker xcb_randr_crtc_t id; 39*61046927SAndroid Build Coastguard Worker xcb_timestamp_t timestamp; 40*61046927SAndroid Build Coastguard Worker 41*61046927SAndroid Build Coastguard Worker int16_t x, y; 42*61046927SAndroid Build Coastguard Worker uint16_t width, height; 43*61046927SAndroid Build Coastguard Worker 44*61046927SAndroid Build Coastguard Worker unsigned refresh_numerator; 45*61046927SAndroid Build Coastguard Worker unsigned refresh_denominator; 46*61046927SAndroid Build Coastguard Worker }; 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard Worker struct loader_screen_resources { 49*61046927SAndroid Build Coastguard Worker mtx_t mtx; 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker xcb_connection_t *conn; 52*61046927SAndroid Build Coastguard Worker xcb_screen_t *screen; 53*61046927SAndroid Build Coastguard Worker 54*61046927SAndroid Build Coastguard Worker xcb_timestamp_t config_timestamp; 55*61046927SAndroid Build Coastguard Worker 56*61046927SAndroid Build Coastguard Worker /* Number of CRTCs with an active mode set */ 57*61046927SAndroid Build Coastguard Worker unsigned num_crtcs; 58*61046927SAndroid Build Coastguard Worker struct loader_crtc_info *crtcs; 59*61046927SAndroid Build Coastguard Worker }; 60*61046927SAndroid Build Coastguard Worker #endif 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard Worker 63*61046927SAndroid Build Coastguard Worker /** 64*61046927SAndroid Build Coastguard Worker * These formats correspond to the similarly named MESA_FORMAT_* 65*61046927SAndroid Build Coastguard Worker * tokens, except in the native endian of the CPU. For example, on 66*61046927SAndroid Build Coastguard Worker * little endian __DRI_IMAGE_FORMAT_XRGB8888 corresponds to 67*61046927SAndroid Build Coastguard Worker * MESA_FORMAT_XRGB8888, but MESA_FORMAT_XRGB8888_REV on big endian. 68*61046927SAndroid Build Coastguard Worker * 69*61046927SAndroid Build Coastguard Worker * __DRI_IMAGE_FORMAT_NONE is for images that aren't directly usable 70*61046927SAndroid Build Coastguard Worker * by the driver (YUV planar formats) but serve as a base image for 71*61046927SAndroid Build Coastguard Worker * creating sub-images for the different planes within the image. 72*61046927SAndroid Build Coastguard Worker * 73*61046927SAndroid Build Coastguard Worker * R8, GR88 and NONE should not be used with createImageFromName or 74*61046927SAndroid Build Coastguard Worker * createImage, and are returned by query from sub images created with 75*61046927SAndroid Build Coastguard Worker * createImageFromNames (NONE, see above) and fromPlane (R8 & GR88). 76*61046927SAndroid Build Coastguard Worker */ 77*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_RGB565 PIPE_FORMAT_B5G6R5_UNORM 78*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XRGB8888 PIPE_FORMAT_BGRX8888_UNORM 79*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ARGB8888 PIPE_FORMAT_BGRA8888_UNORM 80*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ABGR8888 PIPE_FORMAT_RGBA8888_UNORM 81*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XBGR8888 PIPE_FORMAT_RGBX8888_UNORM 82*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_R8 PIPE_FORMAT_R8_UNORM 83*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_GR88 PIPE_FORMAT_RG88_UNORM 84*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_NONE PIPE_FORMAT_NONE 85*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XRGB2101010 PIPE_FORMAT_B10G10R10X2_UNORM 86*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ARGB2101010 PIPE_FORMAT_B10G10R10A2_UNORM 87*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_SARGB8 PIPE_FORMAT_BGRA8888_SRGB 88*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ARGB1555 PIPE_FORMAT_B5G5R5A1_UNORM 89*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_R16 PIPE_FORMAT_R16_UNORM 90*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_GR1616 PIPE_FORMAT_RG1616_UNORM 91*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XBGR2101010 PIPE_FORMAT_R10G10B10X2_UNORM 92*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ABGR2101010 PIPE_FORMAT_R10G10B10A2_UNORM 93*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_SABGR8 PIPE_FORMAT_RGBA8888_SRGB 94*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XBGR16161616F PIPE_FORMAT_R16G16B16X16_FLOAT 95*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ABGR16161616F PIPE_FORMAT_R16G16B16A16_FLOAT 96*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_SXRGB8 PIPE_FORMAT_BGRX8888_SRGB 97*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ABGR16161616 PIPE_FORMAT_R16G16B16X16_UNORM 98*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XBGR16161616 PIPE_FORMAT_R16G16B16A16_UNORM 99*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ARGB4444 PIPE_FORMAT_B4G4R4A4_UNORM 100*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XRGB4444 PIPE_FORMAT_B4G4R4X4_UNORM 101*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ABGR4444 PIPE_FORMAT_R4G4B4A4_UNORM 102*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XBGR4444 PIPE_FORMAT_R4G4B4X4_UNORM 103*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XRGB1555 PIPE_FORMAT_B5G5R5X1_UNORM 104*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_ABGR1555 PIPE_FORMAT_R5G5B5A1_UNORM 105*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_XBGR1555 PIPE_FORMAT_R5G5B5X1_UNORM 106*61046927SAndroid Build Coastguard Worker 107*61046927SAndroid Build Coastguard Worker int 108*61046927SAndroid Build Coastguard Worker loader_image_format_to_fourcc(int format); 109*61046927SAndroid Build Coastguard Worker 110*61046927SAndroid Build Coastguard Worker int 111*61046927SAndroid Build Coastguard Worker loader_fourcc_to_image_format(int format); 112*61046927SAndroid Build Coastguard Worker 113*61046927SAndroid Build Coastguard Worker #ifdef HAVE_X11_PLATFORM 114*61046927SAndroid Build Coastguard Worker void 115*61046927SAndroid Build Coastguard Worker loader_init_screen_resources(struct loader_screen_resources *res, 116*61046927SAndroid Build Coastguard Worker xcb_connection_t *conn, 117*61046927SAndroid Build Coastguard Worker xcb_screen_t *screen); 118*61046927SAndroid Build Coastguard Worker bool 119*61046927SAndroid Build Coastguard Worker loader_update_screen_resources(struct loader_screen_resources *res); 120*61046927SAndroid Build Coastguard Worker 121*61046927SAndroid Build Coastguard Worker void 122*61046927SAndroid Build Coastguard Worker loader_destroy_screen_resources(struct loader_screen_resources *res); 123*61046927SAndroid Build Coastguard Worker #endif 124*61046927SAndroid Build Coastguard Worker 125*61046927SAndroid Build Coastguard Worker #endif /* LOADER_DRI_HELPER_H */ 126