xref: /aosp_15_r20/external/mesa3d/src/gallium/include/frontend/api.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /**********************************************************
2*61046927SAndroid Build Coastguard Worker  * Copyright 2010 VMware, Inc.  All rights reserved.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person
5*61046927SAndroid Build Coastguard Worker  * obtaining a copy of this software and associated documentation
6*61046927SAndroid Build Coastguard Worker  * files (the "Software"), to deal in the Software without
7*61046927SAndroid Build Coastguard Worker  * restriction, including without limitation the rights to use, copy,
8*61046927SAndroid Build Coastguard Worker  * modify, merge, publish, distribute, sublicense, and/or sell copies
9*61046927SAndroid Build Coastguard Worker  * of the Software, and to permit persons to whom the Software is
10*61046927SAndroid Build Coastguard Worker  * furnished to do so, subject to the following conditions:
11*61046927SAndroid Build Coastguard Worker  *
12*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be
13*61046927SAndroid Build Coastguard Worker  * included in all copies or substantial portions of the Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16*61046927SAndroid Build Coastguard Worker  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17*61046927SAndroid Build Coastguard Worker  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18*61046927SAndroid Build Coastguard Worker  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19*61046927SAndroid Build Coastguard Worker  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20*61046927SAndroid Build Coastguard Worker  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21*61046927SAndroid Build Coastguard Worker  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22*61046927SAndroid Build Coastguard Worker  * SOFTWARE.
23*61046927SAndroid Build Coastguard Worker  *
24*61046927SAndroid Build Coastguard Worker  **********************************************************/
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker #ifndef _API_H_
28*61046927SAndroid Build Coastguard Worker #define _API_H_
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker #include "util/format/u_formats.h"
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker struct st_context;
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker /**
35*61046927SAndroid Build Coastguard Worker  * \file API for communication between gallium frontends and supporting
36*61046927SAndroid Build Coastguard Worker  * frontends such as DRI.
37*61046927SAndroid Build Coastguard Worker  *
38*61046927SAndroid Build Coastguard Worker  * This file defines the API that the GL frontend uses to talk to
39*61046927SAndroid Build Coastguard Worker  * the DRI/GLX/WGL frontends.
40*61046927SAndroid Build Coastguard Worker  */
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker /**
44*61046927SAndroid Build Coastguard Worker  * Context flags.
45*61046927SAndroid Build Coastguard Worker  */
46*61046927SAndroid Build Coastguard Worker #define ST_CONTEXT_FLAG_DEBUG               (1 << 0)
47*61046927SAndroid Build Coastguard Worker #define ST_CONTEXT_FLAG_FORWARD_COMPATIBLE  (1 << 1)
48*61046927SAndroid Build Coastguard Worker #define ST_CONTEXT_FLAG_NO_ERROR            (1 << 2)
49*61046927SAndroid Build Coastguard Worker #define ST_CONTEXT_FLAG_RELEASE_NONE        (1 << 3)
50*61046927SAndroid Build Coastguard Worker 
51*61046927SAndroid Build Coastguard Worker 
52*61046927SAndroid Build Coastguard Worker /**
53*61046927SAndroid Build Coastguard Worker  * Reasons that context creation might fail.
54*61046927SAndroid Build Coastguard Worker  */
55*61046927SAndroid Build Coastguard Worker enum st_context_error {
56*61046927SAndroid Build Coastguard Worker    ST_CONTEXT_SUCCESS = 0,
57*61046927SAndroid Build Coastguard Worker    ST_CONTEXT_ERROR_NO_MEMORY,
58*61046927SAndroid Build Coastguard Worker    ST_CONTEXT_ERROR_BAD_VERSION,
59*61046927SAndroid Build Coastguard Worker };
60*61046927SAndroid Build Coastguard Worker 
61*61046927SAndroid Build Coastguard Worker /**
62*61046927SAndroid Build Coastguard Worker  * Available attachments of framebuffer.
63*61046927SAndroid Build Coastguard Worker  */
64*61046927SAndroid Build Coastguard Worker enum st_attachment_type {
65*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_FRONT_LEFT,
66*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_BACK_LEFT,
67*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_FRONT_RIGHT,
68*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_BACK_RIGHT,
69*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_DEPTH_STENCIL,
70*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_ACCUM,
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_COUNT,
73*61046927SAndroid Build Coastguard Worker    ST_ATTACHMENT_INVALID = -1
74*61046927SAndroid Build Coastguard Worker };
75*61046927SAndroid Build Coastguard Worker 
76*61046927SAndroid Build Coastguard Worker /* for buffer_mask in st_visual */
77*61046927SAndroid Build Coastguard Worker #define ST_ATTACHMENT_FRONT_LEFT_MASK     (1 << ST_ATTACHMENT_FRONT_LEFT)
78*61046927SAndroid Build Coastguard Worker #define ST_ATTACHMENT_BACK_LEFT_MASK      (1 << ST_ATTACHMENT_BACK_LEFT)
79*61046927SAndroid Build Coastguard Worker #define ST_ATTACHMENT_FRONT_RIGHT_MASK    (1 << ST_ATTACHMENT_FRONT_RIGHT)
80*61046927SAndroid Build Coastguard Worker #define ST_ATTACHMENT_BACK_RIGHT_MASK     (1 << ST_ATTACHMENT_BACK_RIGHT)
81*61046927SAndroid Build Coastguard Worker #define ST_ATTACHMENT_DEPTH_STENCIL_MASK  (1 << ST_ATTACHMENT_DEPTH_STENCIL)
82*61046927SAndroid Build Coastguard Worker #define ST_ATTACHMENT_ACCUM_MASK          (1 << ST_ATTACHMENT_ACCUM)
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker /**
85*61046927SAndroid Build Coastguard Worker  * Flush flags.
86*61046927SAndroid Build Coastguard Worker  */
87*61046927SAndroid Build Coastguard Worker #define ST_FLUSH_FRONT                    (1 << 0)
88*61046927SAndroid Build Coastguard Worker #define ST_FLUSH_END_OF_FRAME             (1 << 1)
89*61046927SAndroid Build Coastguard Worker #define ST_FLUSH_WAIT                     (1 << 2)
90*61046927SAndroid Build Coastguard Worker #define ST_FLUSH_FENCE_FD                 (1 << 3)
91*61046927SAndroid Build Coastguard Worker 
92*61046927SAndroid Build Coastguard Worker /**
93*61046927SAndroid Build Coastguard Worker  * State invalidation flags to notify st_context that states have been changed
94*61046927SAndroid Build Coastguard Worker  * behind their back.
95*61046927SAndroid Build Coastguard Worker  */
96*61046927SAndroid Build Coastguard Worker #define ST_INVALIDATE_FS_SAMPLER_VIEWS    (1 << 0)
97*61046927SAndroid Build Coastguard Worker #define ST_INVALIDATE_FS_CONSTBUF0        (1 << 1)
98*61046927SAndroid Build Coastguard Worker #define ST_INVALIDATE_VS_CONSTBUF0        (1 << 2)
99*61046927SAndroid Build Coastguard Worker #define ST_INVALIDATE_VERTEX_BUFFERS      (1 << 3)
100*61046927SAndroid Build Coastguard Worker #define ST_INVALIDATE_FB_STATE            (1 << 4)
101*61046927SAndroid Build Coastguard Worker 
102*61046927SAndroid Build Coastguard Worker /**
103*61046927SAndroid Build Coastguard Worker  * Value to pipe_frontend_streen::get_param function.
104*61046927SAndroid Build Coastguard Worker  */
105*61046927SAndroid Build Coastguard Worker enum st_manager_param {
106*61046927SAndroid Build Coastguard Worker    /**
107*61046927SAndroid Build Coastguard Worker     * The DRI frontend on old libGL's doesn't do the right thing
108*61046927SAndroid Build Coastguard Worker     * with regards to invalidating the framebuffers.
109*61046927SAndroid Build Coastguard Worker     *
110*61046927SAndroid Build Coastguard Worker     * For the GL gallium frontend that means that it needs to invalidate
111*61046927SAndroid Build Coastguard Worker     * the framebuffer in glViewport itself.
112*61046927SAndroid Build Coastguard Worker     */
113*61046927SAndroid Build Coastguard Worker    ST_MANAGER_BROKEN_INVALIDATE
114*61046927SAndroid Build Coastguard Worker };
115*61046927SAndroid Build Coastguard Worker 
116*61046927SAndroid Build Coastguard Worker struct pipe_resource;
117*61046927SAndroid Build Coastguard Worker struct util_queue_monitoring;
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker /**
120*61046927SAndroid Build Coastguard Worker  * Used in pipe_frontend_screen::get_egl_image.
121*61046927SAndroid Build Coastguard Worker  */
122*61046927SAndroid Build Coastguard Worker struct st_egl_image
123*61046927SAndroid Build Coastguard Worker {
124*61046927SAndroid Build Coastguard Worker    /* this is owned by the caller */
125*61046927SAndroid Build Coastguard Worker    struct pipe_resource *texture;
126*61046927SAndroid Build Coastguard Worker 
127*61046927SAndroid Build Coastguard Worker    /* format only differs from texture->format for multi-planar (YUV): */
128*61046927SAndroid Build Coastguard Worker    enum pipe_format format;
129*61046927SAndroid Build Coastguard Worker 
130*61046927SAndroid Build Coastguard Worker    unsigned level;
131*61046927SAndroid Build Coastguard Worker    unsigned layer;
132*61046927SAndroid Build Coastguard Worker    /* GL internal format. */
133*61046927SAndroid Build Coastguard Worker    unsigned internalformat;
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker    /* one of __DRI_YUV_COLOR_SPACE_* */
136*61046927SAndroid Build Coastguard Worker    unsigned yuv_color_space;
137*61046927SAndroid Build Coastguard Worker 
138*61046927SAndroid Build Coastguard Worker    /* one of __DRI_YUV_RANGE_* */
139*61046927SAndroid Build Coastguard Worker    unsigned yuv_range;
140*61046927SAndroid Build Coastguard Worker 
141*61046927SAndroid Build Coastguard Worker    bool imported_dmabuf;
142*61046927SAndroid Build Coastguard Worker };
143*61046927SAndroid Build Coastguard Worker 
144*61046927SAndroid Build Coastguard Worker /**
145*61046927SAndroid Build Coastguard Worker  * Represent the visual of a framebuffer.
146*61046927SAndroid Build Coastguard Worker  */
147*61046927SAndroid Build Coastguard Worker struct st_visual
148*61046927SAndroid Build Coastguard Worker {
149*61046927SAndroid Build Coastguard Worker    /**
150*61046927SAndroid Build Coastguard Worker     * Available buffers.  Bitfield of ST_ATTACHMENT_*_MASK bits.
151*61046927SAndroid Build Coastguard Worker     */
152*61046927SAndroid Build Coastguard Worker    unsigned buffer_mask;
153*61046927SAndroid Build Coastguard Worker 
154*61046927SAndroid Build Coastguard Worker    /**
155*61046927SAndroid Build Coastguard Worker     * Buffer formats.  The formats are always set even when the buffer is
156*61046927SAndroid Build Coastguard Worker     * not available.
157*61046927SAndroid Build Coastguard Worker     */
158*61046927SAndroid Build Coastguard Worker    enum pipe_format color_format;
159*61046927SAndroid Build Coastguard Worker    enum pipe_format depth_stencil_format;
160*61046927SAndroid Build Coastguard Worker    enum pipe_format accum_format;
161*61046927SAndroid Build Coastguard Worker    unsigned samples;
162*61046927SAndroid Build Coastguard Worker };
163*61046927SAndroid Build Coastguard Worker 
164*61046927SAndroid Build Coastguard Worker 
165*61046927SAndroid Build Coastguard Worker /**
166*61046927SAndroid Build Coastguard Worker  * Configuration options from driconf
167*61046927SAndroid Build Coastguard Worker  */
168*61046927SAndroid Build Coastguard Worker struct st_config_options
169*61046927SAndroid Build Coastguard Worker {
170*61046927SAndroid Build Coastguard Worker    bool disable_blend_func_extended;
171*61046927SAndroid Build Coastguard Worker    bool disable_glsl_line_continuations;
172*61046927SAndroid Build Coastguard Worker    bool disable_arb_gpu_shader5;
173*61046927SAndroid Build Coastguard Worker    bool disable_uniform_array_resize;
174*61046927SAndroid Build Coastguard Worker    char *alias_shader_extension;
175*61046927SAndroid Build Coastguard Worker    bool allow_vertex_texture_bias;
176*61046927SAndroid Build Coastguard Worker    bool force_compat_shaders;
177*61046927SAndroid Build Coastguard Worker    bool force_glsl_extensions_warn;
178*61046927SAndroid Build Coastguard Worker    unsigned force_glsl_version;
179*61046927SAndroid Build Coastguard Worker    bool allow_extra_pp_tokens;
180*61046927SAndroid Build Coastguard Worker    bool allow_glsl_extension_directive_midshader;
181*61046927SAndroid Build Coastguard Worker    bool allow_glsl_120_subset_in_110;
182*61046927SAndroid Build Coastguard Worker    bool allow_glsl_builtin_const_expression;
183*61046927SAndroid Build Coastguard Worker    bool allow_glsl_relaxed_es;
184*61046927SAndroid Build Coastguard Worker    bool allow_glsl_builtin_variable_redeclaration;
185*61046927SAndroid Build Coastguard Worker    bool allow_higher_compat_version;
186*61046927SAndroid Build Coastguard Worker    bool allow_glsl_compat_shaders;
187*61046927SAndroid Build Coastguard Worker    bool glsl_ignore_write_to_readonly_var;
188*61046927SAndroid Build Coastguard Worker    bool glsl_zero_init;
189*61046927SAndroid Build Coastguard Worker    bool vs_position_always_invariant;
190*61046927SAndroid Build Coastguard Worker    bool vs_position_always_precise;
191*61046927SAndroid Build Coastguard Worker    bool force_glsl_abs_sqrt;
192*61046927SAndroid Build Coastguard Worker    bool allow_glsl_cross_stage_interpolation_mismatch;
193*61046927SAndroid Build Coastguard Worker    bool do_dce_before_clip_cull_analysis;
194*61046927SAndroid Build Coastguard Worker    bool allow_draw_out_of_order;
195*61046927SAndroid Build Coastguard Worker    bool glthread_nop_check_framebuffer_status;
196*61046927SAndroid Build Coastguard Worker    bool ignore_map_unsynchronized;
197*61046927SAndroid Build Coastguard Worker    bool ignore_discard_framebuffer;
198*61046927SAndroid Build Coastguard Worker    bool force_integer_tex_nearest;
199*61046927SAndroid Build Coastguard Worker    bool force_gl_names_reuse;
200*61046927SAndroid Build Coastguard Worker    bool force_gl_map_buffer_synchronized;
201*61046927SAndroid Build Coastguard Worker    bool transcode_etc;
202*61046927SAndroid Build Coastguard Worker    bool transcode_astc;
203*61046927SAndroid Build Coastguard Worker    char *force_gl_vendor;
204*61046927SAndroid Build Coastguard Worker    char *force_gl_renderer;
205*61046927SAndroid Build Coastguard Worker    char *mesa_extension_override;
206*61046927SAndroid Build Coastguard Worker    bool allow_multisampled_copyteximage;
207*61046927SAndroid Build Coastguard Worker 
208*61046927SAndroid Build Coastguard Worker    unsigned char config_options_sha1[20];
209*61046927SAndroid Build Coastguard Worker };
210*61046927SAndroid Build Coastguard Worker 
211*61046927SAndroid Build Coastguard Worker struct pipe_frontend_screen;
212*61046927SAndroid Build Coastguard Worker 
213*61046927SAndroid Build Coastguard Worker /**
214*61046927SAndroid Build Coastguard Worker  * Represent a windowing system drawable.
215*61046927SAndroid Build Coastguard Worker  *
216*61046927SAndroid Build Coastguard Worker  * This is inherited by the drawable implementation of the DRI/GLX/WGL
217*61046927SAndroid Build Coastguard Worker  * frontends, e.g. this is the first field in dri_drawable.
218*61046927SAndroid Build Coastguard Worker  *
219*61046927SAndroid Build Coastguard Worker  * st_context uses the callbacks to invoke one of the DRI/GLX/WGL-specific
220*61046927SAndroid Build Coastguard Worker  * functions.
221*61046927SAndroid Build Coastguard Worker  *
222*61046927SAndroid Build Coastguard Worker  * This drawable can be shared between different threads. The atomic stamp
223*61046927SAndroid Build Coastguard Worker  * is used to communicate that the drawable has been changed, and
224*61046927SAndroid Build Coastguard Worker  * the framebuffer state should be updated.
225*61046927SAndroid Build Coastguard Worker  */
226*61046927SAndroid Build Coastguard Worker struct pipe_frontend_drawable
227*61046927SAndroid Build Coastguard Worker {
228*61046927SAndroid Build Coastguard Worker    /**
229*61046927SAndroid Build Coastguard Worker     * Atomic stamp which changes when framebuffers need to be updated.
230*61046927SAndroid Build Coastguard Worker     */
231*61046927SAndroid Build Coastguard Worker    int32_t stamp;
232*61046927SAndroid Build Coastguard Worker 
233*61046927SAndroid Build Coastguard Worker    /**
234*61046927SAndroid Build Coastguard Worker     * Identifier that uniquely identifies the framebuffer interface object.
235*61046927SAndroid Build Coastguard Worker     */
236*61046927SAndroid Build Coastguard Worker    uint32_t ID;
237*61046927SAndroid Build Coastguard Worker 
238*61046927SAndroid Build Coastguard Worker    /**
239*61046927SAndroid Build Coastguard Worker     * The frontend screen for DRI/GLX/WGL.  This is e.g. dri_screen.
240*61046927SAndroid Build Coastguard Worker     */
241*61046927SAndroid Build Coastguard Worker    struct pipe_frontend_screen *fscreen;
242*61046927SAndroid Build Coastguard Worker 
243*61046927SAndroid Build Coastguard Worker    /**
244*61046927SAndroid Build Coastguard Worker     * The visual of the framebuffer.
245*61046927SAndroid Build Coastguard Worker     */
246*61046927SAndroid Build Coastguard Worker    const struct st_visual *visual;
247*61046927SAndroid Build Coastguard Worker 
248*61046927SAndroid Build Coastguard Worker    /**
249*61046927SAndroid Build Coastguard Worker     * Flush the front buffer.
250*61046927SAndroid Build Coastguard Worker     *
251*61046927SAndroid Build Coastguard Worker     * On some window systems, changes to the front buffers are not immediately
252*61046927SAndroid Build Coastguard Worker     * visible.  They need to be flushed.
253*61046927SAndroid Build Coastguard Worker     *
254*61046927SAndroid Build Coastguard Worker     * @att is one of the front buffer attachments.
255*61046927SAndroid Build Coastguard Worker     */
256*61046927SAndroid Build Coastguard Worker    bool (*flush_front)(struct st_context *st,
257*61046927SAndroid Build Coastguard Worker                        struct pipe_frontend_drawable *drawable,
258*61046927SAndroid Build Coastguard Worker                        enum st_attachment_type statt);
259*61046927SAndroid Build Coastguard Worker 
260*61046927SAndroid Build Coastguard Worker    /**
261*61046927SAndroid Build Coastguard Worker     * The GL frontend asks for the framebuffer attachments it needs.
262*61046927SAndroid Build Coastguard Worker     *
263*61046927SAndroid Build Coastguard Worker     * It should try to only ask for attachments that it currently renders
264*61046927SAndroid Build Coastguard Worker     * to, thus allowing the winsys to delay the allocation of textures not
265*61046927SAndroid Build Coastguard Worker     * needed. For example front buffer attachments are not needed if you
266*61046927SAndroid Build Coastguard Worker     * only do back buffer rendering.
267*61046927SAndroid Build Coastguard Worker     *
268*61046927SAndroid Build Coastguard Worker     * The implementor of this function needs to also ensure
269*61046927SAndroid Build Coastguard Worker     * thread safty as this call might be done from multiple threads.
270*61046927SAndroid Build Coastguard Worker     *
271*61046927SAndroid Build Coastguard Worker     * The returned textures are owned by the caller.  They should be
272*61046927SAndroid Build Coastguard Worker     * unreferenced when no longer used.  If this function is called multiple
273*61046927SAndroid Build Coastguard Worker     * times with different sets of attachments, those buffers not included in
274*61046927SAndroid Build Coastguard Worker     * the last call might be destroyed.
275*61046927SAndroid Build Coastguard Worker     */
276*61046927SAndroid Build Coastguard Worker    bool (*validate)(struct st_context *st,
277*61046927SAndroid Build Coastguard Worker                     struct pipe_frontend_drawable *drawable,
278*61046927SAndroid Build Coastguard Worker                     const enum st_attachment_type *statts,
279*61046927SAndroid Build Coastguard Worker                     unsigned count,
280*61046927SAndroid Build Coastguard Worker                     struct pipe_resource **out,
281*61046927SAndroid Build Coastguard Worker                     struct pipe_resource **resolve);
282*61046927SAndroid Build Coastguard Worker 
283*61046927SAndroid Build Coastguard Worker    bool (*flush_swapbuffers)(struct st_context *st,
284*61046927SAndroid Build Coastguard Worker                              struct pipe_frontend_drawable *drawable);
285*61046927SAndroid Build Coastguard Worker };
286*61046927SAndroid Build Coastguard Worker 
287*61046927SAndroid Build Coastguard Worker 
288*61046927SAndroid Build Coastguard Worker /**
289*61046927SAndroid Build Coastguard Worker  * This is inherited by a screen in the DRI/GLX/WGL frontends, e.g. dri_screen.
290*61046927SAndroid Build Coastguard Worker  */
291*61046927SAndroid Build Coastguard Worker struct pipe_frontend_screen
292*61046927SAndroid Build Coastguard Worker {
293*61046927SAndroid Build Coastguard Worker    struct pipe_screen *screen;
294*61046927SAndroid Build Coastguard Worker 
295*61046927SAndroid Build Coastguard Worker    /**
296*61046927SAndroid Build Coastguard Worker     * Look up and return the info of an EGLImage.
297*61046927SAndroid Build Coastguard Worker     *
298*61046927SAndroid Build Coastguard Worker     * This is used to implement for example EGLImageTargetTexture2DOES.
299*61046927SAndroid Build Coastguard Worker     * The GLeglImageOES agrument of that call is passed directly to this
300*61046927SAndroid Build Coastguard Worker     * function call and the information needed to access this is returned
301*61046927SAndroid Build Coastguard Worker     * in the given struct out.
302*61046927SAndroid Build Coastguard Worker     *
303*61046927SAndroid Build Coastguard Worker     * @fscreen: the screen
304*61046927SAndroid Build Coastguard Worker     * @egl_image: EGLImage that caller recived
305*61046927SAndroid Build Coastguard Worker     * @out: return struct filled out with access information.
306*61046927SAndroid Build Coastguard Worker     *
307*61046927SAndroid Build Coastguard Worker     * This function is optional.
308*61046927SAndroid Build Coastguard Worker     */
309*61046927SAndroid Build Coastguard Worker    bool (*get_egl_image)(struct pipe_frontend_screen *fscreen,
310*61046927SAndroid Build Coastguard Worker                          void *egl_image,
311*61046927SAndroid Build Coastguard Worker                          struct st_egl_image *out);
312*61046927SAndroid Build Coastguard Worker 
313*61046927SAndroid Build Coastguard Worker    /**
314*61046927SAndroid Build Coastguard Worker     * Validate EGLImage passed to get_egl_image.
315*61046927SAndroid Build Coastguard Worker     */
316*61046927SAndroid Build Coastguard Worker    bool (*validate_egl_image)(struct pipe_frontend_screen *fscreen,
317*61046927SAndroid Build Coastguard Worker                               void *egl_image);
318*61046927SAndroid Build Coastguard Worker 
319*61046927SAndroid Build Coastguard Worker    /**
320*61046927SAndroid Build Coastguard Worker     * Query a feature or property from the DRI/GLX/WGL frontend.
321*61046927SAndroid Build Coastguard Worker     */
322*61046927SAndroid Build Coastguard Worker    int (*get_param)(struct pipe_frontend_screen *fscreen,
323*61046927SAndroid Build Coastguard Worker                     enum st_manager_param param);
324*61046927SAndroid Build Coastguard Worker 
325*61046927SAndroid Build Coastguard Worker    /**
326*61046927SAndroid Build Coastguard Worker     * Call the loader function setBackgroundContext. Called from the worker
327*61046927SAndroid Build Coastguard Worker     * thread.
328*61046927SAndroid Build Coastguard Worker     */
329*61046927SAndroid Build Coastguard Worker    void (*set_background_context)(struct st_context *st,
330*61046927SAndroid Build Coastguard Worker                                   struct util_queue_monitoring *queue_info);
331*61046927SAndroid Build Coastguard Worker 
332*61046927SAndroid Build Coastguard Worker    /**
333*61046927SAndroid Build Coastguard Worker     * GL frontend state associated with the screen.
334*61046927SAndroid Build Coastguard Worker     *
335*61046927SAndroid Build Coastguard Worker     * This is where st_context stores the state shared by all contexts.
336*61046927SAndroid Build Coastguard Worker     */
337*61046927SAndroid Build Coastguard Worker    void *st_screen;
338*61046927SAndroid Build Coastguard Worker };
339*61046927SAndroid Build Coastguard Worker 
340*61046927SAndroid Build Coastguard Worker #endif /* _API_H_ */
341