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