X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fdd.h;h=72af158dd07cd43aff23a2000768b8cffed39c26;hp=496a14f8dad328d0dc23c5e40be207de7761acaa;hb=b68ff2b8731427b3b68c9c81902f7ba93606caaf;hpb=fc2a66cfcddea34af0e93dd2221ae1fd3fdd9e87 diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 496a14f8dad..72af158dd07 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -31,10 +31,11 @@ #ifndef DD_INCLUDED #define DD_INCLUDED -/* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */ - #include "glheader.h" +#include "formats.h" +#include "menums.h" +struct gl_bitmap_atlas; struct gl_buffer_object; struct gl_context; struct gl_display_list; @@ -48,6 +49,12 @@ struct gl_shader; struct gl_shader_program; struct gl_texture_image; struct gl_texture_object; +struct gl_memory_info; +struct gl_transform_feedback_object; +struct ati_fragment_shader; +struct util_queue_monitoring; +struct _mesa_prim; +struct _mesa_index_buffer; /* GL_ARB_vertex_buffer_object */ /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return @@ -61,7 +68,7 @@ struct gl_texture_object; * want to provoke the driver to throw away the old storage, we will * respect the contents of already referenced data. */ -#define MESA_MAP_NOWAIT_BIT 0x0040 +#define MESA_MAP_NOWAIT_BIT 0x4000 /** @@ -91,7 +98,7 @@ struct dd_function_table { * This is in addition to any state change callbacks Mesa may already have * made. */ - void (*UpdateState)( struct gl_context *ctx, GLbitfield new_state ); + void (*UpdateState)(struct gl_context *ctx); /** * This is called whenever glFinish() is called. @@ -153,6 +160,14 @@ struct dd_function_table { GLint x, GLint y, GLsizei width, GLsizei height, const struct gl_pixelstore_attrib *unpack, const GLubyte *bitmap ); + + /** + * Called by display list code for optimized glCallLists/glBitmap rendering + * The driver must support texture rectangles of width 1024 or more. + */ + void (*DrawAtlasBitmaps)(struct gl_context *ctx, + const struct gl_bitmap_atlas *atlas, + GLuint count, const GLubyte *ids); /*@}*/ @@ -174,22 +189,24 @@ struct dd_function_table { GLenum srcFormat, GLenum srcType ); /** - * Determine sample counts support for a particular target and format + * Queries different driver parameters for a particular target and format. + * Since ARB_internalformat_query2 introduced several new query parameters + * over ARB_internalformat_query, having one driver hook for each parameter + * is no longer feasible. So this is the generic entry-point for calls + * to glGetInternalFormativ and glGetInternalFormati64v, after Mesa has + * checked errors and default values. * * \param ctx GL context * \param target GL target enum * \param internalFormat GL format enum - * \param samples Buffer to hold the returned sample counts. - * Drivers \b must \b not return more than 16 counts. - * - * \returns - * The number of sample counts actually written to \c samples. If - * \c internaFormat is not renderable, zero is returned. + * \param pname GL enum that specifies the info to query. + * \param params Buffer to hold the result of the query. */ - size_t (*QuerySamplesForFormat)(struct gl_context *ctx, - GLenum target, - GLenum internalFormat, - int samples[16]); + void (*QueryInternalFormat)(struct gl_context *ctx, + GLenum target, + GLenum internalFormat, + GLenum pname, + GLint *params); /** * Called by glTexImage[123]D() and glCopyTexImage[12]D() @@ -296,9 +313,10 @@ 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, mesa_format format, + GLuint numLevels, GLint level, + mesa_format format, GLuint numSamples, GLint width, GLint height, - GLint depth, GLint border); + GLint depth); /*@}*/ @@ -323,16 +341,6 @@ struct dd_function_table { GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); - - /** - * Called by glGetCompressedTexImage. - */ - void (*GetCompressedTexSubImage)(struct gl_context *ctx, - struct gl_texture_image *texImage, - GLint xoffset, GLint yoffset, - GLint zoffset, GLsizei width, - GLsizei height, GLsizei depth, - GLvoid *data); /*@}*/ /** @@ -412,22 +420,6 @@ struct dd_function_table { struct gl_texture_object *texObj, struct gl_texture_object *origTexObj); - /** Sets the given buffer object as the texture's storage. The given - * texture must have target GL_TEXTURE_1D, GL_TEXTURE_2D, - * GL_TEXTURE_RECTANGLE, and GL_TEXTURE_2D_ARRAY; have only a single - * mipmap level; be immutable; and must not have any assigned storage. - * The format and dimensions of the gl_texture_object will already be - * initialized. - * - * This function is used by the meta PBO texture upload path. - */ - bool (*SetTextureStorageForBufferObject)(struct gl_context *ctx, - struct gl_texture_object *texObj, - struct gl_buffer_object *bufferObj, - uint32_t buffer_offset, - uint32_t row_stride, - bool read_only); - /** * Map a renderbuffer into user space. * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and @@ -437,7 +429,8 @@ struct dd_function_table { struct gl_renderbuffer *rb, GLuint x, GLuint y, GLuint w, GLuint h, GLbitfield mode, - GLubyte **mapOut, GLint *rowStrideOut); + GLubyte **mapOut, GLint *rowStrideOut, + bool flip_y); void (*UnmapRenderbuffer)(struct gl_context *ctx, struct gl_renderbuffer *rb); @@ -456,14 +449,16 @@ struct dd_function_table { * \name Vertex/fragment program functions */ /*@{*/ - /** Bind a vertex/fragment program */ - 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); + GLuint id, bool is_arb_asm); /** Delete a program */ void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog); + /** + * Allocate a program to associate with the new ATI fragment shader (optional) + */ + struct gl_program * (*NewATIfs)(struct gl_context *ctx, + struct ati_fragment_shader *curProg); /** * Notify driver that a program string (and GPU code) has been specified * or modified. Return GL_TRUE or GL_FALSE to indicate if the program is @@ -499,6 +494,85 @@ struct dd_function_table { struct gl_shader_program *shader); /*@}*/ + + /** + * \name Draw functions. + */ + /*@{*/ + /** + * For indirect array drawing: + * + * typedef struct { + * GLuint count; + * GLuint primCount; + * GLuint first; + * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise + * } DrawArraysIndirectCommand; + * + * For indirect indexed drawing: + * + * typedef struct { + * GLuint count; + * GLuint primCount; + * GLuint firstIndex; + * GLint baseVertex; + * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise + * } DrawElementsIndirectCommand; + */ + + /** + * Draw a number of primitives. + * \param prims array [nr_prims] describing what to draw (prim type, + * vertex count, first index, instance count, etc). + * \param ib index buffer for indexed drawing, NULL for array drawing + * \param index_bounds_valid are min_index and max_index valid? + * \param min_index lowest vertex index used + * \param max_index highest vertex index used + * \param tfb_vertcount if non-null, indicates which transform feedback + * object has the vertex count. + * \param tfb_stream If called via DrawTransformFeedbackStream, specifies + * the vertex stream buffer from which to get the vertex + * count. + * \param indirect If any prims are indirect, this specifies the buffer + * to find the "DrawArrays/ElementsIndirectCommand" data. + * This may be deprecated in the future + */ + void (*Draw)(struct gl_context *ctx, + const struct _mesa_prim *prims, GLuint nr_prims, + const struct _mesa_index_buffer *ib, + GLboolean index_bounds_valid, + GLuint min_index, GLuint max_index, + struct gl_transform_feedback_object *tfb_vertcount, + unsigned tfb_stream, struct gl_buffer_object *indirect); + + + /** + * Draw a primitive, getting the vertex count, instance count, start + * vertex, etc. from a buffer object. + * \param mode GL_POINTS, GL_LINES, GL_TRIANGLE_STRIP, etc. + * \param indirect_data buffer to get "DrawArrays/ElementsIndirectCommand" + * data + * \param indirect_offset offset of first primitive in indrect_data buffer + * \param draw_count number of primitives to draw + * \param stride stride, in bytes, between + * "DrawArrays/ElementsIndirectCommand" objects + * \param indirect_draw_count_buffer if non-NULL specifies a buffer to get + * the real draw_count value. Used for + * GL_ARB_indirect_parameters. + * \param indirect_draw_count_offset offset to the draw_count value in + * indirect_draw_count_buffer + * \param ib index buffer for indexed drawing, NULL otherwise. + */ + void (*DrawIndirect)(struct gl_context *ctx, GLuint mode, + struct gl_buffer_object *indirect_data, + GLsizeiptr indirect_offset, unsigned draw_count, + unsigned stride, + struct gl_buffer_object *indirect_draw_count_buffer, + GLsizeiptr indirect_draw_count_offset, + const struct _mesa_index_buffer *ib); + /*@}*/ + + /** * \name State-changing functions. * @@ -538,9 +612,9 @@ struct dd_function_table { /** Specify mapping of depth values from NDC to window coordinates */ 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 (*DrawBuffer)(struct gl_context *ctx); + /** Used to allocated any buffers with on-demand creation */ + void (*DrawBufferAllocate)(struct gl_context *ctx); /** Enable or disable server-side gl capabilities */ void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state); /** Specify fog parameters */ @@ -559,7 +633,7 @@ struct dd_function_table { /** Specify the width of rasterized lines */ void (*LineWidth)(struct gl_context *ctx, GLfloat width); /** Specify a logical pixel operation for color index rendering */ - void (*LogicOpcode)(struct gl_context *ctx, GLenum opcode); + void (*LogicOpcode)(struct gl_context *ctx, enum gl_logicop_mode opcode); void (*PointParameterfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params); /** Specify the diameter of rasterized points */ @@ -592,10 +666,9 @@ struct dd_function_table { /** Set texture environment parameters */ void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname, const GLfloat *param); - /** Set texture parameters */ + /** Set texture parameter (callee gets param value from the texObj) */ void (*TexParameter)(struct gl_context *ctx, - struct gl_texture_object *texObj, - GLenum pname, const GLfloat *params); + struct gl_texture_object *texObj, GLenum pname); /** Set the viewport */ void (*Viewport)(struct gl_context *ctx); /*@}*/ @@ -634,6 +707,11 @@ struct dd_function_table { GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size ); + void (*InvalidateBufferSubData)( struct gl_context *ctx, + struct gl_buffer_object *obj, + GLintptr offset, + GLsizeiptr length ); + /* Returns pointer to the start of the mapped range. * May return NULL if MESA_MAP_NOWAIT_BIT is set in access: */ @@ -706,9 +784,16 @@ struct dd_function_table { GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 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); + void (*DiscardFramebuffer)(struct gl_context *ctx, struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att); + + /** + * \name Functions for GL_ARB_sample_locations + */ + void (*GetProgrammableSampleCaps)(struct gl_context *ctx, + const struct gl_framebuffer *fb, + GLuint *bits, GLuint *width, GLuint *height); + void (*EvaluateDepthValues)(struct gl_context *ctx); /** * \name Query objects @@ -721,12 +806,22 @@ struct dd_function_table { void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q); void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q); void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q); + /* + * \pname the value requested to be written (GL_QUERY_RESULT, etc) + * \ptype the type of the value requested to be written: + * GL_UNSIGNED_INT, GL_UNSIGNED_INT64_ARB, + * GL_INT, GL_INT64_ARB + */ + void (*StoreQueryResult)(struct gl_context *ctx, struct gl_query_object *q, + struct gl_buffer_object *buf, intptr_t offset, + GLenum pname, GLenum ptype); /*@}*/ /** * \name Performance monitors */ /*@{*/ + void (*InitPerfMonitorGroups)(struct gl_context *ctx); struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx); void (*DeletePerfMonitor)(struct gl_context *ctx, struct gl_perf_monitor_object *m); @@ -748,15 +843,53 @@ struct dd_function_table { /*@}*/ /** - * \name GLSL-related functions (ARB extensions and OpenGL 2.x) + * \name Performance Query objects */ /*@{*/ - struct gl_shader *(*NewShader)(struct gl_context *ctx, - GLuint name, GLenum type); - void (*UseProgram)(struct gl_context *ctx, struct gl_shader_program *shProg); + unsigned (*InitPerfQueryInfo)(struct gl_context *ctx); + void (*GetPerfQueryInfo)(struct gl_context *ctx, + unsigned queryIndex, + const char **name, + GLuint *dataSize, + GLuint *numCounters, + GLuint *numActive); + void (*GetPerfCounterInfo)(struct gl_context *ctx, + unsigned queryIndex, + unsigned counterIndex, + const char **name, + const char **desc, + GLuint *offset, + GLuint *data_size, + GLuint *type_enum, + GLuint *data_type_enum, + GLuint64 *raw_max); + struct gl_perf_query_object * (*NewPerfQueryObject)(struct gl_context *ctx, + unsigned queryIndex); + void (*DeletePerfQuery)(struct gl_context *ctx, + struct gl_perf_query_object *obj); + bool (*BeginPerfQuery)(struct gl_context *ctx, + struct gl_perf_query_object *obj); + void (*EndPerfQuery)(struct gl_context *ctx, + struct gl_perf_query_object *obj); + void (*WaitPerfQuery)(struct gl_context *ctx, + struct gl_perf_query_object *obj); + bool (*IsPerfQueryReady)(struct gl_context *ctx, + struct gl_perf_query_object *obj); + void (*GetPerfQueryData)(struct gl_context *ctx, + struct gl_perf_query_object *obj, + GLsizei dataSize, + GLuint *data, + GLuint *bytesWritten); /*@}*/ + /** + * \name GREMEDY debug/marker functions + */ + /*@{*/ + void (*EmitStringMarker)(struct gl_context *ctx, const GLchar *string, GLsizei len); + /*@}*/ + /** * \name Support for multiple T&L engines */ @@ -804,7 +937,7 @@ struct dd_function_table { * \name GL_ARB_sync interfaces */ /*@{*/ - struct gl_sync_object * (*NewSyncObject)(struct gl_context *, GLenum); + struct gl_sync_object * (*NewSyncObject)(struct gl_context *); void (*FenceSync)(struct gl_context *, struct gl_sync_object *, GLenum, GLbitfield); void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *); @@ -841,6 +974,13 @@ struct dd_function_table { struct gl_renderbuffer *rb, void *image_handle); + /** + * \name GL_EXT_EGL_image_storage interface + */ + void (*EGLImageTargetTexStorage)(struct gl_context *ctx, GLenum target, + struct gl_texture_object *texObj, + struct gl_texture_image *texImage, + GLeglImageOES image_handle); /** * \name GL_EXT_transform_feedback interface */ @@ -920,6 +1060,18 @@ struct dd_function_table { void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers); /** @} */ + /** + * GL_EXT_shader_framebuffer_fetch_non_coherent rendering barrier. + * + * On return from this function any framebuffer contents written by + * previous draw commands are guaranteed to be visible from subsequent + * fragment shader invocations using the + * EXT_shader_framebuffer_fetch_non_coherent interface. + */ + /** @{ */ + void (*FramebufferFetchBarrier)(struct gl_context *ctx); + /** @} */ + /** * \name GL_ARB_compute_shader interface */ @@ -927,6 +1079,239 @@ struct dd_function_table { void (*DispatchCompute)(struct gl_context *ctx, const GLuint *num_groups); void (*DispatchComputeIndirect)(struct gl_context *ctx, GLintptr indirect); /*@}*/ + + /** + * \name GL_ARB_compute_variable_group_size interface + */ + /*@{*/ + void (*DispatchComputeGroupSize)(struct gl_context *ctx, + const GLuint *num_groups, + const GLuint *group_size); + /*@}*/ + + /** + * Query information about memory. Device memory is e.g. VRAM. Staging + * memory is e.g. GART. All sizes are in kilobytes. + */ + void (*QueryMemoryInfo)(struct gl_context *ctx, + struct gl_memory_info *info); + + /** + * Indicate that this thread is being used by Mesa as a background drawing + * thread for the given GL context. + * + * If this function is called more than once from any given thread, each + * subsequent call overrides the context that was passed in the previous + * call. Mesa takes advantage of this to re-use a background thread to + * perform drawing on behalf of multiple contexts. + * + * Mesa may sometimes call this function from a non-background thread + * (i.e. a thread that has already been bound to a context using + * __DriverAPIRec::MakeCurrent()); when this happens, ctx will be equal to + * the context that is bound to this thread. + * + * Mesa will only call this function if GL multithreading is enabled. + */ + void (*SetBackgroundContext)(struct gl_context *ctx, + struct util_queue_monitoring *queue_info); + + /** + * \name GL_ARB_sparse_buffer interface + */ + /*@{*/ + void (*BufferPageCommitment)(struct gl_context *ctx, + struct gl_buffer_object *bufferObj, + GLintptr offset, GLsizeiptr size, + GLboolean commit); + /*@}*/ + + /** + * \name GL_ARB_bindless_texture interface + */ + /*@{*/ + GLuint64 (*NewTextureHandle)(struct gl_context *ctx, + struct gl_texture_object *texObj, + struct gl_sampler_object *sampObj); + void (*DeleteTextureHandle)(struct gl_context *ctx, GLuint64 handle); + void (*MakeTextureHandleResident)(struct gl_context *ctx, GLuint64 handle, + bool resident); + GLuint64 (*NewImageHandle)(struct gl_context *ctx, + struct gl_image_unit *imgObj); + void (*DeleteImageHandle)(struct gl_context *ctx, GLuint64 handle); + void (*MakeImageHandleResident)(struct gl_context *ctx, GLuint64 handle, + GLenum access, bool resident); + /*@}*/ + + + /** + * \name GL_EXT_external_objects interface + */ + /*@{*/ + /** + * Called to allocate a new memory object. Drivers will usually + * allocate/return a subclass of gl_memory_object. + */ + struct gl_memory_object * (*NewMemoryObject)(struct gl_context *ctx, + GLuint name); + /** + * Called to delete/free a memory object. Drivers should free the + * object and any image data it contains. + */ + void (*DeleteMemoryObject)(struct gl_context *ctx, + struct gl_memory_object *memObj); + + /** + * Set the given memory object as the texture's storage. + */ + GLboolean (*SetTextureStorageForMemoryObject)(struct gl_context *ctx, + struct gl_texture_object *tex_obj, + struct gl_memory_object *mem_obj, + GLsizei levels, GLsizei width, + GLsizei height, GLsizei depth, + GLuint64 offset); + + /** + * Use a memory object as the backing data for a buffer object + */ + GLboolean (*BufferDataMem)(struct gl_context *ctx, + GLenum target, + GLsizeiptrARB size, + struct gl_memory_object *memObj, + GLuint64 offset, + GLenum usage, + struct gl_buffer_object *bufObj); + + /** + * Fill uuid with an unique identifier for this driver + * + * uuid must point to GL_UUID_SIZE_EXT bytes of available memory + */ + void (*GetDriverUuid)(struct gl_context *ctx, char *uuid); + + /** + * Fill uuid with an unique identifier for the device associated + * to this driver + * + * uuid must point to GL_UUID_SIZE_EXT bytes of available memory + */ + void (*GetDeviceUuid)(struct gl_context *ctx, char *uuid); + + /*@}*/ + + /** + * \name GL_EXT_external_objects_fd interface + */ + /*@{*/ + /** + * Called to import a memory object. The caller relinquishes ownership + * of fd after the call returns. + * + * Accessing fd after ImportMemoryObjectFd returns results in undefined + * behaviour. This is consistent with EXT_external_object_fd. + */ + void (*ImportMemoryObjectFd)(struct gl_context *ctx, + struct gl_memory_object *memObj, + GLuint64 size, + int fd); + /*@}*/ + + /** + * \name GL_ARB_get_program_binary + */ + /*@{*/ + /** + * Calls to retrieve/store a binary serialized copy of the current program. + */ + void (*GetProgramBinaryDriverSHA1)(struct gl_context *ctx, uint8_t *sha1); + + void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx, + struct gl_shader_program *shProg, + struct gl_program *prog); + + void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx, + struct gl_shader_program *shProg, + struct gl_program *prog); + /*@}*/ + + /** + * \name GL_EXT_semaphore interface + */ + /*@{*/ + /** + * Called to allocate a new semaphore object. Drivers will usually + * allocate/return a subclass of gl_semaphore_object. + */ + struct gl_semaphore_object * (*NewSemaphoreObject)(struct gl_context *ctx, + GLuint name); + /** + * Called to delete/free a semaphore object. Drivers should free the + * object and any associated resources. + */ + void (*DeleteSemaphoreObject)(struct gl_context *ctx, + struct gl_semaphore_object *semObj); + + /** + * Introduce an operation to wait for the semaphore object in the GL + * server's command stream + */ + void (*ServerWaitSemaphoreObject)(struct gl_context *ctx, + struct gl_semaphore_object *semObj, + GLuint numBufferBarriers, + struct gl_buffer_object **bufObjs, + GLuint numTextureBarriers, + struct gl_texture_object **texObjs, + const GLenum *srcLayouts); + + /** + * Introduce an operation to signal the semaphore object in the GL + * server's command stream + */ + void (*ServerSignalSemaphoreObject)(struct gl_context *ctx, + struct gl_semaphore_object *semObj, + GLuint numBufferBarriers, + struct gl_buffer_object **bufObjs, + GLuint numTextureBarriers, + struct gl_texture_object **texObjs, + const GLenum *dstLayouts); + /*@}*/ + + /** + * \name GL_EXT_semaphore_fd interface + */ + /*@{*/ + /** + * Called to import a semaphore object. The caller relinquishes ownership + * of fd after the call returns. + * + * Accessing fd after ImportSemaphoreFd returns results in undefined + * behaviour. This is consistent with EXT_semaphore_fd. + */ + void (*ImportSemaphoreFd)(struct gl_context *ctx, + struct gl_semaphore_object *semObj, + int fd); + /*@}*/ + + /** + * \name Disk shader cache functions + */ + /*@{*/ + /** + * Called to initialize gl_program::driver_cache_blob (and size) with a + * ralloc allocated buffer. + * + * This buffer will be saved and restored as part of the gl_program + * serialization and deserialization. + */ + void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx, + struct gl_program *prog); + /*@}*/ + + /** + * \name Set the number of compiler threads for ARB_parallel_shader_compile + */ + void (*SetMaxShaderCompilerThreads)(struct gl_context *ctx, unsigned count); + bool (*GetShaderProgramCompletionStatus)(struct gl_context *ctx, + struct gl_shader_program *shprog); }; @@ -1102,6 +1487,8 @@ typedef struct { void (GLAPIENTRYP VertexAttribL3dv)( GLuint index, const GLdouble *v); void (GLAPIENTRYP VertexAttribL4dv)( GLuint index, const GLdouble *v); + void (GLAPIENTRYP VertexAttribL1ui64ARB)( GLuint index, GLuint64EXT x); + void (GLAPIENTRYP VertexAttribL1ui64vARB)( GLuint index, const GLuint64EXT *v); } GLvertexformat;