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