X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fdd.h;h=89765351e14d39c9c9bb55372718122f3962685d;hb=637b6c24785d202e0f608c8dec098d63d857ae0e;hp=c5d7ad419c56424c1b66cfb275cf7914a777b0c2;hpb=49993a1a9dc34b78ccd345b91087385917a40138;p=mesa.git diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index c5d7ad419c5..89765351e14 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -5,7 +5,6 @@ /* * Mesa 3-D graphics library - * Version: 6.5.2 * * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * @@ -40,6 +39,7 @@ struct gl_buffer_object; struct gl_context; struct gl_display_list; struct gl_framebuffer; +struct gl_image_unit; struct gl_pixelstore_attrib; struct gl_program; struct gl_renderbuffer; @@ -93,15 +93,6 @@ struct dd_function_table { */ void (*UpdateState)( struct gl_context *ctx, GLbitfield new_state ); - /** - * Get the width and height of the named buffer/window. - * - * Mesa uses this to determine when the driver's window size has changed. - * XXX OBSOLETE: this function will be removed in the future. - */ - void (*GetBufferSize)( struct gl_framebuffer *buffer, - GLuint *width, GLuint *height ); - /** * Resize the given framebuffer to the given size. * XXX OBSOLETE: this function will be removed in the future. @@ -191,9 +182,9 @@ struct dd_function_table { * GL_TEXTURE_CUBE_MAP_[POSITIVE/NEGATIVE]_[XYZ]. * Called by glTexImage(), etc. */ - gl_format (*ChooseTextureFormat)( struct gl_context *ctx, - GLenum target, GLint internalFormat, - GLenum srcFormat, GLenum srcType ); + mesa_format (*ChooseTextureFormat)(struct gl_context *ctx, + GLenum target, GLint internalFormat, + GLenum srcFormat, GLenum srcType ); /** * Determine sample counts support for a particular target and format @@ -247,18 +238,42 @@ struct dd_function_table { GLenum format, GLenum type, GLvoid *pixels, struct gl_texture_image *texImage ); + /** + * Called by glClearTex[Sub]Image + * + * Clears a rectangular region of the image to a given value. The + * clearValue argument is either NULL or points to a single texel to use as + * the clear value in the same internal format as the texture image. If it + * is NULL then the texture should be cleared to zeroes. + */ + void (*ClearTexSubImage)(struct gl_context *ctx, + struct gl_texture_image *texImage, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + const GLvoid *clearValue); + /** * Called by glCopyTex[Sub]Image[123]D(). + * + * This function should copy a rectangular region in the rb to a single + * destination slice, specified by @slice. In the case of 1D array + * textures (where one GL call can potentially affect multiple destination + * slices), core mesa takes care of calling this function multiple times, + * once for each scanline to be copied. */ void (*CopyTexSubImage)(struct gl_context *ctx, GLuint dims, struct gl_texture_image *texImage, - GLint xoffset, GLint yoffset, GLint zoffset, + GLint xoffset, GLint yoffset, GLint slice, struct gl_renderbuffer *rb, GLint x, GLint y, GLsizei width, GLsizei height); /** * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled. + * Note that if the texture is a cube map, the parameter will + * indicate which cube face to generate (GL_POSITIVE/NEGATIVE_X/Y/Z). + * texObj->BaseLevel is the level from which to generate the remaining + * mipmap levels. */ void (*GenerateMipmap)(struct gl_context *ctx, GLenum target, struct gl_texture_object *texObj); @@ -271,7 +286,7 @@ struct dd_function_table { * \return GL_TRUE if the image is OK, GL_FALSE if too large */ GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target, - GLint level, gl_format format, + GLint level, mesa_format format, GLint width, GLint height, GLint depth, GLint border); /*@}*/ @@ -313,10 +328,10 @@ struct dd_function_table { /*@{*/ /** - * Called by glBindTexture(). + * Called by glBindTexture() and glBindTextures(). */ - void (*BindTexture)( struct gl_context *ctx, GLenum target, - struct gl_texture_object *tObj ); + void (*BindTexture)( struct gl_context *ctx, GLuint texUnit, + GLenum target, struct gl_texture_object *tObj ); /** * Called to allocate a new texture object. Drivers will usually @@ -379,6 +394,11 @@ struct dd_function_table { GLsizei levels, GLsizei width, GLsizei height, GLsizei depth); + /** Called as part of glTextureView to add views to origTexObj */ + GLboolean (*TextureView)(struct gl_context *ctx, + struct gl_texture_object *texObj, + struct gl_texture_object *origTexObj); + /** * Map a renderbuffer into user space. * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and @@ -393,6 +413,13 @@ struct dd_function_table { void (*UnmapRenderbuffer)(struct gl_context *ctx, struct gl_renderbuffer *rb); + /** + * Optional driver entrypoint that binds a non-texture renderbuffer's + * contents to a texture image. + */ + GLboolean (*BindRenderbufferTexImage)(struct gl_context *ctx, + struct gl_renderbuffer *rb, + struct gl_texture_image *texImage); /*@}*/ @@ -401,9 +428,11 @@ struct dd_function_table { */ /*@{*/ /** Bind a vertex/fragment program */ - void (*BindProgram)(struct gl_context *ctx, GLenum target, struct gl_program *prog); + void (*BindProgram)(struct gl_context *ctx, GLenum target, + struct gl_program *prog); /** Allocate a new program */ - struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target, GLuint id); + struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target, + GLuint id); /** Delete a program */ void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog); /** @@ -437,7 +466,8 @@ struct dd_function_table { * This gives drivers an opportunity to clone the IR and make their * own transformations on it for the purposes of code generation. */ - GLboolean (*LinkShader)(struct gl_context *ctx, struct gl_shader_program *shader); + GLboolean (*LinkShader)(struct gl_context *ctx, + struct gl_shader_program *shader); /*@}*/ /** @@ -455,7 +485,8 @@ struct dd_function_table { /** Set the blend color */ void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]); /** Set the blend equation */ - void (*BlendEquationSeparate)(struct gl_context *ctx, GLenum modeRGB, GLenum modeA); + void (*BlendEquationSeparate)(struct gl_context *ctx, + GLenum modeRGB, GLenum modeA); void (*BlendEquationSeparatei)(struct gl_context *ctx, GLuint buffer, GLenum modeRGB, GLenum modeA); /** Specify pixel arithmetic */ @@ -466,7 +497,7 @@ struct dd_function_table { GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorA, GLenum dfactorA); /** Specify a plane against which all geometry is clipped */ - void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *equation ); + void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *eq); /** Enable and disable writing of frame buffer color components */ void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask, GLboolean bmask, GLboolean amask ); @@ -483,11 +514,11 @@ struct dd_function_table { /** Enable or disable writing into the depth buffer */ void (*DepthMask)(struct gl_context *ctx, GLboolean flag); /** Specify mapping of depth values from NDC to window coordinates */ - void (*DepthRange)(struct gl_context *ctx, GLclampd nearval, GLclampd farval); + void (*DepthRange)(struct gl_context *ctx); /** Specify the current buffer for writing */ void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer ); /** Specify the buffers for writing for fragment programs*/ - void (*DrawBuffers)( struct gl_context *ctx, GLsizei n, const GLenum *buffers ); + void (*DrawBuffers)(struct gl_context *ctx, GLsizei n, const GLenum *buffers); /** Enable or disable server-side gl capabilities */ void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state); /** Specify fog parameters */ @@ -501,7 +532,8 @@ struct dd_function_table { void (*Lightfv)(struct gl_context *ctx, GLenum light, GLenum pname, const GLfloat *params ); /** Set the lighting model parameters */ - void (*LightModelfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params); + void (*LightModelfv)(struct gl_context *ctx, GLenum pname, + const GLfloat *params); /** Specify the line stipple pattern */ void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern ); /** Specify the width of rasterized lines */ @@ -523,7 +555,7 @@ struct dd_function_table { /** Set rasterization mode */ void (*RenderMode)(struct gl_context *ctx, GLenum mode ); /** Define the scissor box */ - void (*Scissor)(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h); + void (*Scissor)(struct gl_context *ctx); /** Select flat or smooth shading */ void (*ShadeModel)(struct gl_context *ctx, GLenum mode); /** OpenGL 2.0 two-sided StencilFunc */ @@ -541,11 +573,11 @@ struct dd_function_table { void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname, const GLfloat *param); /** Set texture parameters */ - void (*TexParameter)(struct gl_context *ctx, GLenum target, + void (*TexParameter)(struct gl_context *ctx, struct gl_texture_object *texObj, GLenum pname, const GLfloat *params); /** Set the viewport */ - void (*Viewport)(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h); + void (*Viewport)(struct gl_context *ctx); /*@}*/ @@ -553,17 +585,14 @@ struct dd_function_table { * \name Vertex/pixel buffer object functions */ /*@{*/ - void (*BindBuffer)( struct gl_context *ctx, GLenum target, - struct gl_buffer_object *obj ); - - struct gl_buffer_object * (*NewBufferObject)( struct gl_context *ctx, GLuint buffer, - GLenum target ); + struct gl_buffer_object * (*NewBufferObject)(struct gl_context *ctx, + GLuint buffer, GLenum target); void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj ); - GLboolean (*BufferData)( struct gl_context *ctx, GLenum target, GLsizeiptrARB size, - const GLvoid *data, GLenum usage, - struct gl_buffer_object *obj ); + GLboolean (*BufferData)(struct gl_context *ctx, GLenum target, + GLsizeiptrARB size, const GLvoid *data, GLenum usage, + GLenum storageFlags, struct gl_buffer_object *obj); void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data, @@ -573,24 +602,34 @@ struct dd_function_table { GLintptrARB offset, GLsizeiptrARB size, GLvoid *data, struct gl_buffer_object *obj ); + void (*ClearBufferSubData)( struct gl_context *ctx, + GLintptr offset, GLsizeiptr size, + const GLvoid *clearValue, + GLsizeiptr clearValueSize, + struct gl_buffer_object *obj ); + void (*CopyBufferSubData)( struct gl_context *ctx, struct gl_buffer_object *src, struct gl_buffer_object *dst, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size ); - /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access: + /* Returns pointer to the start of the mapped range. + * May return NULL if MESA_MAP_NOWAIT_BIT is set in access: */ void * (*MapBufferRange)( struct gl_context *ctx, GLintptr offset, GLsizeiptr length, GLbitfield access, - struct gl_buffer_object *obj); + struct gl_buffer_object *obj, + gl_map_buffer_index index); void (*FlushMappedBufferRange)(struct gl_context *ctx, GLintptr offset, GLsizeiptr length, - struct gl_buffer_object *obj); + struct gl_buffer_object *obj, + gl_map_buffer_index index); GLboolean (*UnmapBuffer)( struct gl_context *ctx, - struct gl_buffer_object *obj ); + struct gl_buffer_object *obj, + gl_map_buffer_index index); /*@}*/ /** @@ -598,22 +637,34 @@ struct dd_function_table { */ /*@{*/ /* variations on ObjectPurgeable */ - GLenum (*BufferObjectPurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectPurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectPurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); + GLenum (*BufferObjectPurgeable)(struct gl_context *ctx, + struct gl_buffer_object *obj, GLenum option); + GLenum (*RenderObjectPurgeable)(struct gl_context *ctx, + struct gl_renderbuffer *obj, GLenum option); + GLenum (*TextureObjectPurgeable)(struct gl_context *ctx, + struct gl_texture_object *obj, + GLenum option); /* variations on ObjectUnpurgeable */ - GLenum (*BufferObjectUnpurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectUnpurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectUnpurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); + GLenum (*BufferObjectUnpurgeable)(struct gl_context *ctx, + struct gl_buffer_object *obj, + GLenum option); + GLenum (*RenderObjectUnpurgeable)(struct gl_context *ctx, + struct gl_renderbuffer *obj, + GLenum option); + GLenum (*TextureObjectUnpurgeable)(struct gl_context *ctx, + struct gl_texture_object *obj, + GLenum option); /*@}*/ /** * \name Functions for GL_EXT_framebuffer_{object,blit,discard}. */ /*@{*/ - struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, GLuint name); - struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, GLuint name); + struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, + GLuint name); + struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, + GLuint name); void (*BindFramebuffer)(struct gl_context *ctx, GLenum target, struct gl_framebuffer *drawFb, struct gl_framebuffer *readFb); @@ -625,7 +676,7 @@ struct dd_function_table { struct gl_framebuffer *fb, struct gl_renderbuffer_attachment *att); void (*FinishRenderTexture)(struct gl_context *ctx, - struct gl_renderbuffer_attachment *att); + struct gl_renderbuffer *rb); void (*ValidateFramebuffer)(struct gl_context *ctx, struct gl_framebuffer *fb); /*@}*/ @@ -634,7 +685,8 @@ struct dd_function_table { GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); void (*DiscardFramebuffer)(struct gl_context *ctx, - GLenum target, GLsizei numAttachments, const GLenum *attachments); + GLenum target, GLsizei numAttachments, + const GLenum *attachments); /** * \name Query objects @@ -649,23 +701,49 @@ struct dd_function_table { void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q); /*@}*/ + /** + * \name Performance monitors + */ + /*@{*/ + struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx); + void (*DeletePerfMonitor)(struct gl_context *ctx, + struct gl_perf_monitor_object *m); + GLboolean (*BeginPerfMonitor)(struct gl_context *ctx, + struct gl_perf_monitor_object *m); + + /** Stop an active performance monitor, discarding results. */ + void (*ResetPerfMonitor)(struct gl_context *ctx, + struct gl_perf_monitor_object *m); + void (*EndPerfMonitor)(struct gl_context *ctx, + struct gl_perf_monitor_object *m); + GLboolean (*IsPerfMonitorResultAvailable)(struct gl_context *ctx, + struct gl_perf_monitor_object *m); + void (*GetPerfMonitorResult)(struct gl_context *ctx, + struct gl_perf_monitor_object *m, + GLsizei dataSize, + GLuint *data, + GLint *bytesWritten); + /*@}*/ + /** * \name Vertex Array objects */ /*@{*/ - struct gl_array_object * (*NewArrayObject)(struct gl_context *ctx, GLuint id); - void (*DeleteArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); - void (*BindArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); + struct gl_vertex_array_object * (*NewArrayObject)(struct gl_context *ctx, GLuint id); + void (*DeleteArrayObject)(struct gl_context *ctx, struct gl_vertex_array_object *); + void (*BindArrayObject)(struct gl_context *ctx, struct gl_vertex_array_object *); /*@}*/ /** * \name GLSL-related functions (ARB extensions and OpenGL 2.x) */ /*@{*/ - struct gl_shader *(*NewShader)(struct gl_context *ctx, GLuint name, GLenum type); + struct gl_shader *(*NewShader)(struct gl_context *ctx, + GLuint name, GLenum type); void (*DeleteShader)(struct gl_context *ctx, struct gl_shader *shader); - struct gl_shader_program *(*NewShaderProgram)(struct gl_context *ctx, GLuint name); + struct gl_shader_program *(*NewShaderProgram)(struct gl_context *ctx, + GLuint name); void (*DeleteShaderProgram)(struct gl_context *ctx, struct gl_shader_program *shProg); void (*UseProgram)(struct gl_context *ctx, struct gl_shader_program *shProg); @@ -696,15 +774,16 @@ struct dd_function_table { #define FLUSH_UPDATE_CURRENT 0x2 /** * Set by the driver-supplied T&L engine whenever vertices are buffered - * between glBegin()/glEnd() objects or __struct gl_contextRec::Current is not - * updated. + * between glBegin()/glEnd() objects or __struct gl_contextRec::Current + * is not updated. A bitmask of the FLUSH_x values above. * * The dd_function_table::FlushVertices call below may be used to resolve * these conditions. */ - GLuint NeedFlush; - GLuint SaveNeedFlush; + GLbitfield NeedFlush; + /** Need to call SaveFlushVertices() upon state change? */ + GLboolean SaveNeedFlush; /* Called prior to any of the GLvertexformat functions being * called. Paired with Driver.FlushVertices(). @@ -771,7 +850,8 @@ struct dd_function_table { */ /*@{*/ struct gl_sync_object * (*NewSyncObject)(struct gl_context *, GLenum); - void (*FenceSync)(struct gl_context *, struct gl_sync_object *, GLenum, GLbitfield); + void (*FenceSync)(struct gl_context *, struct gl_sync_object *, + GLenum, GLbitfield); void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *); void (*CheckSync)(struct gl_context *, struct gl_sync_object *); void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *, @@ -781,9 +861,11 @@ struct dd_function_table { /*@}*/ /** GL_NV_conditional_render */ - void (*BeginConditionalRender)(struct gl_context *ctx, struct gl_query_object *q, + void (*BeginConditionalRender)(struct gl_context *ctx, + struct gl_query_object *q, GLenum mode); - void (*EndConditionalRender)(struct gl_context *ctx, struct gl_query_object *q); + void (*EndConditionalRender)(struct gl_context *ctx, + struct gl_query_object *q); /** * \name GL_OES_draw_texture interface @@ -820,6 +902,14 @@ struct dd_function_table { void (*ResumeTransformFeedback)(struct gl_context *ctx, struct gl_transform_feedback_object *obj); + /** + * Return the number of vertices written to a stream during the last + * Begin/EndTransformFeedback block. + */ + GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx, + struct gl_transform_feedback_object *obj, + GLuint stream); + /** * \name GL_NV_texture_barrier interface */ @@ -846,32 +936,57 @@ struct dd_function_table { struct gl_framebuffer *fb, GLuint index, GLfloat *outValue); + + /** + * \name NV_vdpau_interop interface + */ + void (*VDPAUMapSurface)(struct gl_context *ctx, GLenum target, + GLenum access, GLboolean output, + struct gl_texture_object *texObj, + struct gl_texture_image *texImage, + const GLvoid *vdpSurface, GLuint index); + void (*VDPAUUnmapSurface)(struct gl_context *ctx, GLenum target, + GLenum access, GLboolean output, + struct gl_texture_object *texObj, + struct gl_texture_image *texImage, + const GLvoid *vdpSurface, GLuint index); + + /** + * Query reset status for GL_ARB_robustness + * + * Per \c glGetGraphicsResetStatusARB, this function should return a + * non-zero value once after a reset. If a reset is non-atomic, the + * non-zero status should be returned for the duration of the reset. + */ + GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx); + + /** + * \name GL_ARB_shader_image_load_store interface. + */ + /** @{ */ + void (*BindImageTexture)(struct gl_context *ctx, + struct gl_image_unit *unit, + struct gl_texture_object *texObj, + GLint level, GLboolean layered, GLint layer, + GLenum access, GLenum format); + + void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers); + /** @} */ }; /** - * Transform/Clip/Lighting interface + * Per-vertex functions. * - * Drivers present a reduced set of the functions possible in - * glBegin()/glEnd() objects. Core mesa provides translation stubs for the - * remaining functions to map down to these entry points. + * These are the functions which can appear between glBegin and glEnd. + * Depending on whether we're inside or outside a glBegin/End pair + * and whether we're in immediate mode or building a display list, these + * functions behave differently. This structure allows us to switch + * between those modes more easily. * - * These are the initial values to be installed into dispatch by - * mesa. If the T&L driver wants to modify the dispatch table - * while installed, it must do so itself. It would be possible for - * the vertexformat to install its own initial values for these - * functions, but this way there is an obvious list of what is - * expected of the driver. - * - * If the driver wants to hook in entry points other than those - * listed, it must restore them to their original values in - * the disable() callback, below. + * Generally, these pointers point to functions in the VBO module. */ typedef struct { - /** - * \name Vertex - */ - /*@{*/ void (GLAPIENTRYP ArrayElement)( GLint ); void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat ); void (GLAPIENTRYP Color3fv)( const GLfloat * ); @@ -1019,26 +1134,6 @@ typedef struct { void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type, GLboolean normalized, const GLuint *value); - - /*@}*/ - - void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat ); - - /** - * \name Eval - * - * If you don't support eval, fallback to the default vertex format - * on receiving an eval call and use the pipeline mechanism to - * provide partial T&L acceleration. - * - * Mesa will provide a set of helper functions to do eval within - * accelerated vertex formats, eventually... - */ - /*@{*/ - void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 ); - void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); - /*@}*/ - } GLvertexformat;