xref: /aosp_15_r20/external/mesa3d/src/loader/loader_dri_helper.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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