xref: /aosp_15_r20/external/mesa3d/src/mesa/main/dd.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /**
2*61046927SAndroid Build Coastguard Worker  * \file dd.h
3*61046927SAndroid Build Coastguard Worker  * Device driver interfaces.
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker /*
7*61046927SAndroid Build Coastguard Worker  * Mesa 3-D graphics library
8*61046927SAndroid Build Coastguard Worker  *
9*61046927SAndroid Build Coastguard Worker  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
12*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
13*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
14*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
16*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
17*61046927SAndroid Build Coastguard Worker  *
18*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included
19*61046927SAndroid Build Coastguard Worker  * in all copies or substantial portions of the Software.
20*61046927SAndroid Build Coastguard Worker  *
21*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22*61046927SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
24*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
25*61046927SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26*61046927SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27*61046927SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
28*61046927SAndroid Build Coastguard Worker  */
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker #ifndef DD_INCLUDED
32*61046927SAndroid Build Coastguard Worker #define DD_INCLUDED
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker #include "util/glheader.h"
35*61046927SAndroid Build Coastguard Worker #include "formats.h"
36*61046927SAndroid Build Coastguard Worker #include "menums.h"
37*61046927SAndroid Build Coastguard Worker #include "compiler/shader_enums.h"
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker #if defined(_WIN32) && defined(_WINDOWS_)
40*61046927SAndroid Build Coastguard Worker #error "Should not include <windows.h> here"
41*61046927SAndroid Build Coastguard Worker #endif
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker struct gl_buffer_object;
44*61046927SAndroid Build Coastguard Worker struct gl_context;
45*61046927SAndroid Build Coastguard Worker struct gl_display_list;
46*61046927SAndroid Build Coastguard Worker struct gl_framebuffer;
47*61046927SAndroid Build Coastguard Worker struct gl_image_unit;
48*61046927SAndroid Build Coastguard Worker struct gl_pixelstore_attrib;
49*61046927SAndroid Build Coastguard Worker struct gl_program;
50*61046927SAndroid Build Coastguard Worker struct gl_renderbuffer;
51*61046927SAndroid Build Coastguard Worker struct gl_renderbuffer_attachment;
52*61046927SAndroid Build Coastguard Worker struct gl_shader;
53*61046927SAndroid Build Coastguard Worker struct gl_shader_program;
54*61046927SAndroid Build Coastguard Worker struct gl_texture_image;
55*61046927SAndroid Build Coastguard Worker struct gl_texture_object;
56*61046927SAndroid Build Coastguard Worker struct gl_memory_info;
57*61046927SAndroid Build Coastguard Worker struct gl_memory_object;
58*61046927SAndroid Build Coastguard Worker struct gl_query_object;
59*61046927SAndroid Build Coastguard Worker struct gl_sampler_object;
60*61046927SAndroid Build Coastguard Worker struct gl_transform_feedback_object;
61*61046927SAndroid Build Coastguard Worker struct gl_vertex_array_object;
62*61046927SAndroid Build Coastguard Worker struct ati_fragment_shader;
63*61046927SAndroid Build Coastguard Worker struct util_queue_monitoring;
64*61046927SAndroid Build Coastguard Worker struct pipe_draw_info;
65*61046927SAndroid Build Coastguard Worker struct pipe_draw_indirect_info;
66*61046927SAndroid Build Coastguard Worker struct pipe_draw_start_count_bias;
67*61046927SAndroid Build Coastguard Worker struct pipe_vertex_state;
68*61046927SAndroid Build Coastguard Worker struct pipe_draw_vertex_state_info;
69*61046927SAndroid Build Coastguard Worker struct pipe_vertex_buffer;
70*61046927SAndroid Build Coastguard Worker struct pipe_vertex_element;
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker /* GL_ARB_vertex_buffer_object */
73*61046927SAndroid Build Coastguard Worker /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
74*61046927SAndroid Build Coastguard Worker  * NULL) if buffer is unavailable for immediate mapping.
75*61046927SAndroid Build Coastguard Worker  *
76*61046927SAndroid Build Coastguard Worker  * Does GL_MAP_INVALIDATE_RANGE_BIT do this?  It seems so, but it
77*61046927SAndroid Build Coastguard Worker  * would require more book-keeping in the driver than seems necessary
78*61046927SAndroid Build Coastguard Worker  * at this point.
79*61046927SAndroid Build Coastguard Worker  *
80*61046927SAndroid Build Coastguard Worker  * Does GL_MAP_INVALIDATE_BUFFER_BIT do this?  Not really -- we don't
81*61046927SAndroid Build Coastguard Worker  * want to provoke the driver to throw away the old storage, we will
82*61046927SAndroid Build Coastguard Worker  * respect the contents of already referenced data.
83*61046927SAndroid Build Coastguard Worker  */
84*61046927SAndroid Build Coastguard Worker #define MESA_MAP_NOWAIT_BIT       0x4000
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker /* Mapping a buffer is allowed from any thread. */
87*61046927SAndroid Build Coastguard Worker #define MESA_MAP_THREAD_SAFE_BIT  0x8000
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker /* This buffer will only be mapped/unmapped once */
90*61046927SAndroid Build Coastguard Worker #define MESA_MAP_ONCE            0x10000
91*61046927SAndroid Build Coastguard Worker 
92*61046927SAndroid Build Coastguard Worker /* This BufferStorage flag indicates that the buffer will be used
93*61046927SAndroid Build Coastguard Worker  * by pipe_vertex_state, which doesn't track buffer busyness and doesn't
94*61046927SAndroid Build Coastguard Worker  * support invalidations.
95*61046927SAndroid Build Coastguard Worker  */
96*61046927SAndroid Build Coastguard Worker #define MESA_GALLIUM_VERTEX_STATE_STORAGE 0x20000
97*61046927SAndroid Build Coastguard Worker 
98*61046927SAndroid Build Coastguard Worker 
99*61046927SAndroid Build Coastguard Worker /**
100*61046927SAndroid Build Coastguard Worker  * Device driver function table.
101*61046927SAndroid Build Coastguard Worker  * Core Mesa uses these function pointers to call into device drivers.
102*61046927SAndroid Build Coastguard Worker  * Most of these functions directly correspond to OpenGL state commands.
103*61046927SAndroid Build Coastguard Worker  * Core Mesa will call these functions after error checking has been done
104*61046927SAndroid Build Coastguard Worker  * so that the drivers don't have to worry about error testing.
105*61046927SAndroid Build Coastguard Worker  *
106*61046927SAndroid Build Coastguard Worker  * Vertex transformation/clipping/lighting is patched into the T&L module.
107*61046927SAndroid Build Coastguard Worker  * Rasterization functions are patched into the swrast module.
108*61046927SAndroid Build Coastguard Worker  *
109*61046927SAndroid Build Coastguard Worker  * Note: when new functions are added here, the drivers/common/driverfuncs.c
110*61046927SAndroid Build Coastguard Worker  * file should be updated too!!!
111*61046927SAndroid Build Coastguard Worker  */
112*61046927SAndroid Build Coastguard Worker struct dd_function_table {
113*61046927SAndroid Build Coastguard Worker    /**
114*61046927SAndroid Build Coastguard Worker     * \name Vertex/fragment program functions
115*61046927SAndroid Build Coastguard Worker     */
116*61046927SAndroid Build Coastguard Worker    /** Allocate a new program */
117*61046927SAndroid Build Coastguard Worker    struct gl_program * (*NewProgram)(struct gl_context *ctx,
118*61046927SAndroid Build Coastguard Worker                                      gl_shader_stage stage,
119*61046927SAndroid Build Coastguard Worker                                      GLuint id, bool is_arb_asm);
120*61046927SAndroid Build Coastguard Worker    /**
121*61046927SAndroid Build Coastguard Worker     * \name Draw functions.
122*61046927SAndroid Build Coastguard Worker     */
123*61046927SAndroid Build Coastguard Worker    /*@{*/
124*61046927SAndroid Build Coastguard Worker    /**
125*61046927SAndroid Build Coastguard Worker     * For indirect array drawing:
126*61046927SAndroid Build Coastguard Worker     *
127*61046927SAndroid Build Coastguard Worker     *    typedef struct {
128*61046927SAndroid Build Coastguard Worker     *       GLuint count;
129*61046927SAndroid Build Coastguard Worker     *       GLuint primCount;
130*61046927SAndroid Build Coastguard Worker     *       GLuint first;
131*61046927SAndroid Build Coastguard Worker     *       GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise
132*61046927SAndroid Build Coastguard Worker     *    } DrawArraysIndirectCommand;
133*61046927SAndroid Build Coastguard Worker     *
134*61046927SAndroid Build Coastguard Worker     * For indirect indexed drawing:
135*61046927SAndroid Build Coastguard Worker     *
136*61046927SAndroid Build Coastguard Worker     *    typedef struct {
137*61046927SAndroid Build Coastguard Worker     *       GLuint count;
138*61046927SAndroid Build Coastguard Worker     *       GLuint primCount;
139*61046927SAndroid Build Coastguard Worker     *       GLuint firstIndex;
140*61046927SAndroid Build Coastguard Worker     *       GLint  baseVertex;
141*61046927SAndroid Build Coastguard Worker     *       GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise
142*61046927SAndroid Build Coastguard Worker     *    } DrawElementsIndirectCommand;
143*61046927SAndroid Build Coastguard Worker     */
144*61046927SAndroid Build Coastguard Worker 
145*61046927SAndroid Build Coastguard Worker    /**
146*61046927SAndroid Build Coastguard Worker     * The basic draw function used to implement glDrawArrays, glDrawElements,
147*61046927SAndroid Build Coastguard Worker     * multidraws, and instancing.
148*61046927SAndroid Build Coastguard Worker     *
149*61046927SAndroid Build Coastguard Worker     * The interface is identical to pipe_context::draw_vbo.
150*61046927SAndroid Build Coastguard Worker     */
151*61046927SAndroid Build Coastguard Worker    void (*DrawGallium)(struct gl_context *ctx,
152*61046927SAndroid Build Coastguard Worker                        const struct pipe_draw_info *info,
153*61046927SAndroid Build Coastguard Worker                        unsigned drawid_offset,
154*61046927SAndroid Build Coastguard Worker                        const struct pipe_draw_indirect_info *indirect,
155*61046927SAndroid Build Coastguard Worker                        const struct pipe_draw_start_count_bias *draws,
156*61046927SAndroid Build Coastguard Worker                        unsigned num_draws);
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker    /**
159*61046927SAndroid Build Coastguard Worker     * Same as DrawGallium, but mode can also change between draws.
160*61046927SAndroid Build Coastguard Worker     *
161*61046927SAndroid Build Coastguard Worker     * "info" is not const and the following fields can be changed by
162*61046927SAndroid Build Coastguard Worker     * the callee in addition to the fields listed by DrawGallium:
163*61046927SAndroid Build Coastguard Worker     * - info->mode
164*61046927SAndroid Build Coastguard Worker     *
165*61046927SAndroid Build Coastguard Worker     * This function exists to decrease complexity of DrawGallium.
166*61046927SAndroid Build Coastguard Worker     */
167*61046927SAndroid Build Coastguard Worker    void (*DrawGalliumMultiMode)(struct gl_context *ctx,
168*61046927SAndroid Build Coastguard Worker                                 struct pipe_draw_info *info,
169*61046927SAndroid Build Coastguard Worker                                 const struct pipe_draw_start_count_bias *draws,
170*61046927SAndroid Build Coastguard Worker                                 const unsigned char *mode,
171*61046927SAndroid Build Coastguard Worker                                 unsigned num_draws);
172*61046927SAndroid Build Coastguard Worker    /*@}*/
173*61046927SAndroid Build Coastguard Worker 
174*61046927SAndroid Build Coastguard Worker    /**
175*61046927SAndroid Build Coastguard Worker     * \name Support for multiple T&L engines
176*61046927SAndroid Build Coastguard Worker     */
177*61046927SAndroid Build Coastguard Worker    /*@{*/
178*61046927SAndroid Build Coastguard Worker 
179*61046927SAndroid Build Coastguard Worker    /**
180*61046927SAndroid Build Coastguard Worker     * Set by the driver-supplied T&L engine.
181*61046927SAndroid Build Coastguard Worker     *
182*61046927SAndroid Build Coastguard Worker     * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
183*61046927SAndroid Build Coastguard Worker     */
184*61046927SAndroid Build Coastguard Worker    GLuint CurrentExecPrimitive;
185*61046927SAndroid Build Coastguard Worker 
186*61046927SAndroid Build Coastguard Worker    /**
187*61046927SAndroid Build Coastguard Worker     * Current glBegin state of an in-progress compilation.  May be
188*61046927SAndroid Build Coastguard Worker     * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END
189*61046927SAndroid Build Coastguard Worker     * or PRIM_UNKNOWN.
190*61046927SAndroid Build Coastguard Worker     */
191*61046927SAndroid Build Coastguard Worker    GLuint CurrentSavePrimitive;
192*61046927SAndroid Build Coastguard Worker 
193*61046927SAndroid Build Coastguard Worker 
194*61046927SAndroid Build Coastguard Worker #define FLUSH_STORED_VERTICES 0x1
195*61046927SAndroid Build Coastguard Worker #define FLUSH_UPDATE_CURRENT  0x2
196*61046927SAndroid Build Coastguard Worker    /**
197*61046927SAndroid Build Coastguard Worker     * Set by the driver-supplied T&L engine whenever vertices are buffered
198*61046927SAndroid Build Coastguard Worker     * between glBegin()/glEnd() objects or __struct gl_contextRec::Current
199*61046927SAndroid Build Coastguard Worker     * is not updated.  A bitmask of the FLUSH_x values above.
200*61046927SAndroid Build Coastguard Worker     *
201*61046927SAndroid Build Coastguard Worker     * The dd_function_table::FlushVertices call below may be used to resolve
202*61046927SAndroid Build Coastguard Worker     * these conditions.
203*61046927SAndroid Build Coastguard Worker     */
204*61046927SAndroid Build Coastguard Worker    GLbitfield NeedFlush;
205*61046927SAndroid Build Coastguard Worker 
206*61046927SAndroid Build Coastguard Worker    /** Need to call vbo_save_SaveFlushVertices() upon state change? */
207*61046927SAndroid Build Coastguard Worker    GLboolean SaveNeedFlush;
208*61046927SAndroid Build Coastguard Worker 
209*61046927SAndroid Build Coastguard Worker    /**@}*/
210*61046927SAndroid Build Coastguard Worker 
211*61046927SAndroid Build Coastguard Worker    /**
212*61046927SAndroid Build Coastguard Worker     * Query reset status for GL_ARB_robustness
213*61046927SAndroid Build Coastguard Worker     *
214*61046927SAndroid Build Coastguard Worker     * Per \c glGetGraphicsResetStatusARB, this function should return a
215*61046927SAndroid Build Coastguard Worker     * non-zero value once after a reset.  If a reset is non-atomic, the
216*61046927SAndroid Build Coastguard Worker     * non-zero status should be returned for the duration of the reset.
217*61046927SAndroid Build Coastguard Worker     */
218*61046927SAndroid Build Coastguard Worker    GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx);
219*61046927SAndroid Build Coastguard Worker 
220*61046927SAndroid Build Coastguard Worker    /**
221*61046927SAndroid Build Coastguard Worker     * \name GL_ARB_get_program_binary
222*61046927SAndroid Build Coastguard Worker     */
223*61046927SAndroid Build Coastguard Worker    /*@{*/
224*61046927SAndroid Build Coastguard Worker    /**
225*61046927SAndroid Build Coastguard Worker     * Calls to retrieve/store a binary serialized copy of the current program.
226*61046927SAndroid Build Coastguard Worker     */
227*61046927SAndroid Build Coastguard Worker    void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx,
228*61046927SAndroid Build Coastguard Worker                                             struct gl_shader_program *shProg,
229*61046927SAndroid Build Coastguard Worker                                             struct gl_program *prog);
230*61046927SAndroid Build Coastguard Worker 
231*61046927SAndroid Build Coastguard Worker    void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx,
232*61046927SAndroid Build Coastguard Worker                                               struct gl_shader_program *shProg,
233*61046927SAndroid Build Coastguard Worker                                               struct gl_program *prog);
234*61046927SAndroid Build Coastguard Worker    /*@}*/
235*61046927SAndroid Build Coastguard Worker 
236*61046927SAndroid Build Coastguard Worker    /**
237*61046927SAndroid Build Coastguard Worker     * \name Disk shader cache functions
238*61046927SAndroid Build Coastguard Worker     */
239*61046927SAndroid Build Coastguard Worker    /*@{*/
240*61046927SAndroid Build Coastguard Worker    /**
241*61046927SAndroid Build Coastguard Worker     * Called to initialize gl_program::driver_cache_blob (and size) with a
242*61046927SAndroid Build Coastguard Worker     * ralloc allocated buffer.
243*61046927SAndroid Build Coastguard Worker     *
244*61046927SAndroid Build Coastguard Worker     * This buffer will be saved and restored as part of the gl_program
245*61046927SAndroid Build Coastguard Worker     * serialization and deserialization.
246*61046927SAndroid Build Coastguard Worker     */
247*61046927SAndroid Build Coastguard Worker    void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx,
248*61046927SAndroid Build Coastguard Worker                                           struct gl_program *prog);
249*61046927SAndroid Build Coastguard Worker    /*@}*/
250*61046927SAndroid Build Coastguard Worker };
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker #endif /* DD_INCLUDED */
253