diff options
-rw-r--r-- | src/glx/x11/glxextensions.c | 4 | ||||
-rw-r--r-- | src/glx/x11/glxextensions.h | 2 | ||||
-rw-r--r-- | src/glx/x11/indirect.c | 154 | ||||
-rw-r--r-- | src/glx/x11/indirect.h | 9 | ||||
-rw-r--r-- | src/glx/x11/indirect_init.c | 15 | ||||
-rw-r--r-- | src/mesa/glapi/gl_API.xml | 72 |
6 files changed, 226 insertions, 30 deletions
diff --git a/src/glx/x11/glxextensions.c b/src/glx/x11/glxextensions.c index 166dd18c04..56ba5c9b47 100644 --- a/src/glx/x11/glxextensions.c +++ b/src/glx/x11/glxextensions.c @@ -112,12 +112,13 @@ static const struct extension_info known_glx_extensions[] = { static const struct extension_info known_gl_extensions[] = { { GL(ARB_depth_texture), VER(1,4), Y, N, N, N }, + { GL(ARB_draw_buffers), VER(0,0), Y, N, N, N }, { GL(ARB_fragment_program), VER(0,0), Y, N, N, N }, { GL(ARB_fragment_program_shadow), VER(0,0), Y, N, N, N }, { GL(ARB_imaging), VER(0,0), Y, N, N, N }, { GL(ARB_multisample), VER(1,3), Y, N, N, N }, { GL(ARB_multitexture), VER(1,3), Y, N, N, N }, - { GL(ARB_occlusion_query), VER(1,5), N, N, N, N }, + { GL(ARB_occlusion_query), VER(1,5), Y, N, N, N }, { GL(ARB_point_parameters), VER(1,4), Y, N, N, N }, { GL(ARB_point_sprite), VER(0,0), Y, N, N, N }, { GL(ARB_shadow), VER(1,4), Y, N, N, N }, @@ -184,6 +185,7 @@ static const struct extension_info known_gl_extensions[] = { { GL(3DFX_texture_compression_FXT1), VER(0,0), Y, N, N, N }, { GL(APPLE_packed_pixels), VER(1,2), Y, N, N, N }, { GL(APPLE_ycbcr_422), VER(0,0), Y, N, N, N }, + { GL(ATI_draw_buffers), VER(0,0), Y, N, N, N }, { GL(ATI_text_fragment_shader), VER(0,0), Y, N, N, N }, { GL(ATI_texture_env_combine3), VER(0,0), Y, N, N, N }, { GL(ATI_texture_float), VER(0,0), Y, N, N, N }, diff --git a/src/glx/x11/glxextensions.h b/src/glx/x11/glxextensions.h index e374161168..fd19bd2335 100644 --- a/src/glx/x11/glxextensions.h +++ b/src/glx/x11/glxextensions.h @@ -74,6 +74,7 @@ enum { enum { GL_ARB_depth_texture_bit = 0, + GL_ARB_draw_buffers_bit, GL_ARB_fragment_program_bit, GL_ARB_fragment_program_shadow_bit, GL_ARB_imaging_bit, @@ -212,6 +213,7 @@ enum { */ GL_ATI_blend_equation_separate_bit = GL_EXT_blend_equation_separate_bit, + GL_ATI_draw_buffers_bit = GL_ARB_draw_buffers_bit, GL_ATIX_texture_env_combine3_bit = GL_ATI_texture_env_combine3_bit, GL_EXT_point_parameters_bit = GL_ARB_point_parameters_bit, GL_EXT_texture_env_add_bit = GL_ARB_texture_env_add_bit, diff --git a/src/glx/x11/indirect.c b/src/glx/x11/indirect.c index c654c93939..4d564c12d5 100644 --- a/src/glx/x11/indirect.c +++ b/src/glx/x11/indirect.c @@ -5451,6 +5451,35 @@ __indirect_glSampleCoverageARB(GLclampf value, GLboolean invert) if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } +#define X_GLrop_DrawBuffersARB 233 +void +__indirect_glDrawBuffersARB(GLsizei n, const GLenum * bufs) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + const GLuint cmdlen = 8 + __GLX_PAD((n * 4)); + if (__builtin_expect((n >= 0) && (gc->currentDpy != NULL), 1)) { + if (cmdlen <= gc->maxSmallRenderCommandSize) { + if ( (gc->pc + cmdlen) > gc->bufEnd ) { + (void) __glXFlushRenderBuffer(gc, gc->pc); + } + emit_header(gc->pc, X_GLrop_DrawBuffersARB, cmdlen); + (void) memcpy((void *)(gc->pc + 4), (void *)(&n), 4); + (void) memcpy((void *)(gc->pc + 8), (void *)(bufs), (n * 4)); + gc->pc += cmdlen; + if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } + } + else { + const GLint op = X_GLrop_DrawBuffersARB; + const GLuint cmdlenLarge = cmdlen + 4; + GLubyte * const pc = __glXFlushRenderBuffer(gc, gc->pc); + (void) memcpy((void *)(pc + 0), (void *)(&cmdlenLarge), 4); + (void) memcpy((void *)(pc + 4), (void *)(&op), 4); + (void) memcpy((void *)(pc + 8), (void *)(&n), 4); + __glXSendLargeCommand(gc, pc, 12, bufs, (n * 4)); + } + } +} + #define X_GLvop_AreTexturesResidentEXT 11 GLboolean __indirect_glAreTexturesResidentEXT(GLsizei n, const GLuint * textures, GLboolean * residences) @@ -7145,6 +7174,131 @@ __indirect_glGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte return; } +#define X_GLsop_GenQueriesARB 162 +void +__indirect_glGenQueriesARB(GLsizei n, GLuint * ids) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + Display * const dpy = gc->currentDpy; + const GLuint cmdlen = 4; + if (__builtin_expect((n >= 0) && (dpy != NULL), 1)) { + GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_GenQueriesARB, cmdlen); + (void) memcpy((void *)(pc + 0), (void *)(&n), 4); + (void) __glXReadReply(dpy, 4, ids, GL_FALSE); + UnlockDisplay(dpy); SyncHandle(); + } + return; +} + +#define X_GLsop_DeleteQueriesARB 161 +void +__indirect_glDeleteQueriesARB(GLsizei n, const GLuint * ids) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + Display * const dpy = gc->currentDpy; + const GLuint cmdlen = 4 + __GLX_PAD((n * 4)); + if (__builtin_expect((n >= 0) && (dpy != NULL), 1)) { + GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_DeleteQueriesARB, cmdlen); + (void) memcpy((void *)(pc + 0), (void *)(&n), 4); + (void) memcpy((void *)(pc + 4), (void *)(ids), (n * 4)); + UnlockDisplay(dpy); SyncHandle(); + } + return; +} + +#define X_GLsop_IsQueryARB 163 +GLboolean +__indirect_glIsQueryARB(GLuint id) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + Display * const dpy = gc->currentDpy; + GLboolean retval = (GLboolean) 0; + const GLuint cmdlen = 4; + if (__builtin_expect(dpy != NULL, 1)) { + GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_IsQueryARB, cmdlen); + (void) memcpy((void *)(pc + 0), (void *)(&id), 4); + retval = (GLboolean) __glXReadReply(dpy, 0, NULL, GL_FALSE); + UnlockDisplay(dpy); SyncHandle(); + } + return retval; +} + +#define X_GLrop_BeginQueryARB 231 +void +__indirect_glBeginQueryARB(GLenum target, GLuint id) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + const GLuint cmdlen = 12; + emit_header(gc->pc, X_GLrop_BeginQueryARB, cmdlen); + (void) memcpy((void *)(gc->pc + 4), (void *)(&target), 4); + (void) memcpy((void *)(gc->pc + 8), (void *)(&id), 4); + gc->pc += cmdlen; + if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } +} + +#define X_GLrop_EndQueryARB 232 +void +__indirect_glEndQueryARB(GLenum target) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + const GLuint cmdlen = 8; + emit_header(gc->pc, X_GLrop_EndQueryARB, cmdlen); + (void) memcpy((void *)(gc->pc + 4), (void *)(&target), 4); + gc->pc += cmdlen; + if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } +} + +#define X_GLsop_GetQueryivARB 164 +void +__indirect_glGetQueryivARB(GLenum target, GLenum pname, GLint * params) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + Display * const dpy = gc->currentDpy; + const GLuint cmdlen = 8; + if (__builtin_expect(dpy != NULL, 1)) { + GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_GetQueryivARB, cmdlen); + (void) memcpy((void *)(pc + 0), (void *)(&target), 4); + (void) memcpy((void *)(pc + 4), (void *)(&pname), 4); + (void) __glXReadReply(dpy, 4, params, GL_FALSE); + UnlockDisplay(dpy); SyncHandle(); + } + return; +} + +#define X_GLsop_GetQueryObjectivARB 165 +void +__indirect_glGetQueryObjectivARB(GLuint id, GLenum pname, GLint * params) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + Display * const dpy = gc->currentDpy; + const GLuint cmdlen = 8; + if (__builtin_expect(dpy != NULL, 1)) { + GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_GetQueryObjectivARB, cmdlen); + (void) memcpy((void *)(pc + 0), (void *)(&id), 4); + (void) memcpy((void *)(pc + 4), (void *)(&pname), 4); + (void) __glXReadReply(dpy, 4, params, GL_FALSE); + UnlockDisplay(dpy); SyncHandle(); + } + return; +} + +#define X_GLsop_GetQueryObjectuivARB 166 +void +__indirect_glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint * params) +{ + __GLXcontext * const gc = __glXGetCurrentContext(); + Display * const dpy = gc->currentDpy; + const GLuint cmdlen = 8; + if (__builtin_expect(dpy != NULL, 1)) { + GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_GetQueryObjectuivARB, cmdlen); + (void) memcpy((void *)(pc + 0), (void *)(&id), 4); + (void) memcpy((void *)(pc + 4), (void *)(&pname), 4); + (void) __glXReadReply(dpy, 4, params, GL_FALSE); + UnlockDisplay(dpy); SyncHandle(); + } + return; +} + #define X_GLvop_GetVertexAttribdvNV 1301 void __indirect_glGetVertexAttribdvNV(GLuint index, GLenum pname, GLdouble * params) diff --git a/src/glx/x11/indirect.h b/src/glx/x11/indirect.h index 51228465d4..b704ba846c 100644 --- a/src/glx/x11/indirect.h +++ b/src/glx/x11/indirect.h @@ -482,6 +482,7 @@ extern HIDDEN void __indirect_glLoadTransposeMatrixdARB(const GLdouble * m); extern HIDDEN void __indirect_glMultTransposeMatrixfARB(const GLfloat * m); extern HIDDEN void __indirect_glMultTransposeMatrixdARB(const GLdouble * m); extern HIDDEN void __indirect_glSampleCoverageARB(GLclampf value, GLboolean invert); +extern HIDDEN void __indirect_glDrawBuffersARB(GLsizei n, const GLenum * bufs); extern HIDDEN GLboolean __indirect_glAreTexturesResidentEXT(GLsizei n, const GLuint * textures, GLboolean * residences); extern HIDDEN void __indirect_glGenTexturesEXT(GLsizei n, GLuint * textures); extern HIDDEN GLboolean __indirect_glIsTextureEXT(GLuint texture); @@ -643,6 +644,14 @@ extern HIDDEN void __indirect_glProgramNamedParameter4fvNV(GLuint id, GLsizei le extern HIDDEN void __indirect_glProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); extern HIDDEN void __indirect_glGetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); extern HIDDEN void __indirect_glGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); +extern HIDDEN void __indirect_glGenQueriesARB(GLsizei n, GLuint * ids); +extern HIDDEN void __indirect_glDeleteQueriesARB(GLsizei n, const GLuint * ids); +extern HIDDEN GLboolean __indirect_glIsQueryARB(GLuint id); +extern HIDDEN void __indirect_glBeginQueryARB(GLenum target, GLuint id); +extern HIDDEN void __indirect_glEndQueryARB(GLenum target); +extern HIDDEN void __indirect_glGetQueryivARB(GLenum target, GLenum pname, GLint * params); +extern HIDDEN void __indirect_glGetQueryObjectivARB(GLuint id, GLenum pname, GLint * params); +extern HIDDEN void __indirect_glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint * params); extern HIDDEN void __indirect_glGetVertexAttribdvNV(GLuint index, GLenum pname, GLdouble * params); extern HIDDEN void __indirect_glGetVertexAttribfvNV(GLuint index, GLenum pname, GLfloat * params); extern HIDDEN void __indirect_glGetVertexAttribivNV(GLuint index, GLenum pname, GLint * params); diff --git a/src/glx/x11/indirect_init.c b/src/glx/x11/indirect_init.c index 5e2fc0437e..70e9dab15f 100644 --- a/src/glx/x11/indirect_init.c +++ b/src/glx/x11/indirect_init.c @@ -503,6 +503,10 @@ __GLapi * __glXNewIndirectAPI( void ) glAPI->SampleCoverageARB = __indirect_glSampleCoverageARB; + /* GL_ARB_draw_buffers */ + + glAPI->DrawBuffersARB = __indirect_glDrawBuffersARB; + /* GL_EXT_texture_object */ glAPI->AreTexturesResidentEXT = __indirect_glAreTexturesResidentEXT; @@ -721,6 +725,17 @@ __GLapi * __glXNewIndirectAPI( void ) glAPI->GetProgramNamedParameterfvNV = __indirect_glGetProgramNamedParameterfvNV; glAPI->GetProgramNamedParameterdvNV = __indirect_glGetProgramNamedParameterdvNV; + /* GL_ARB_occlusion_query */ + + glAPI->GenQueriesARB = __indirect_glGenQueriesARB; + glAPI->DeleteQueriesARB = __indirect_glDeleteQueriesARB; + glAPI->IsQueryARB = __indirect_glIsQueryARB; + glAPI->BeginQueryARB = __indirect_glBeginQueryARB; + glAPI->EndQueryARB = __indirect_glEndQueryARB; + glAPI->GetQueryivARB = __indirect_glGetQueryivARB; + glAPI->GetQueryObjectivARB = __indirect_glGetQueryObjectivARB; + glAPI->GetQueryObjectuivARB = __indirect_glGetQueryObjectuivARB; + /* GL_NV_vertex_program */ glAPI->GetVertexAttribdvNV = __indirect_glGetVertexAttribdvNV; diff --git a/src/mesa/glapi/gl_API.xml b/src/mesa/glapi/gl_API.xml index 919803a070..e13815cc10 100644 --- a/src/mesa/glapi/gl_API.xml +++ b/src/mesa/glapi/gl_API.xml @@ -4979,11 +4979,11 @@ glx: <param name="level" type="GLint"/> <param name="img" type="GLvoid *" output="true"/> - <!-- This has to be hand coded because the image size is in the - "wrong" place. Technically, this should be a - 'always_array="true"' case. The size field in the reply would - be at offset 12. However, the size is actually at offset 16. - This is where the 'width' is in a GetTexImage reply. --> + <!-- This has to be hand coded because the image size is in the + "wrong" place. Technically, this should be a + 'always_array="true"' case. The size field in the reply would + be at offset 12. However, the size is actually at offset 16. + This is where the 'width' is in a GetTexImage reply. --> <glx sop="160" handcode="true"/> </function> </category> @@ -5130,21 +5130,25 @@ glx: <function name="CurrentPaletteMatrixARB" offset="?"> <param name="index" type="GLint"/> + <glx ignore="true" rop="4329"/> </function> <function name="MatrixIndexubvARB" offset="?"> - <param name="size" type="GLint"/> - <param name="indices" type="const GLubyte *"/> + <param name="size" type="GLint" counter="true"/> + <param name="indices" type="const GLubyte *" count="size"/> + <glx ignore="true" rop="4326"/> </function> <function name="MatrixIndexusvARB" offset="?"> - <param name="size" type="GLint"/> - <param name="indices" type="const GLushort *"/> + <param name="size" type="GLint" counter="true"/> + <param name="indices" type="const GLushort *" count="size"/> + <glx ignore="true" rop="4327"/> </function> <function name="MatrixIndexuivARB" offset="?"> - <param name="size" type="GLint"/> - <param name="indices" type="const GLuint *"/> + <param name="size" type="GLint" counter="true"/> + <param name="indices" type="const GLuint *" count="size"/> + <glx ignore="true" rop="4328"/> </function> <function name="MatrixIndexPointerARB" offset="?"> @@ -6022,60 +6026,70 @@ glx: </category> <category name="GL_ARB_occlusion_query" number="29"> - <enum name="QUERY_COUNTER_BITS_ARB" value="0x8864"/> - <enum name="CURRENT_QUERY_ARB" value="0x8865"/> - <enum name="QUERY_RESULT_ARB" value="0x8866"/> - <enum name="QUERY_RESULT_AVAILABLE_ARB" value="0x8867"/> + <enum name="QUERY_COUNTER_BITS_ARB" count="1" value="0x8864"> + <size name="GetQueryivARB" mode="get"/> + </enum> + <enum name="CURRENT_QUERY_ARB" count="1" value="0x8865"> + <size name="GetQueryivARB" mode="get"/> + </enum> + <enum name="QUERY_RESULT_ARB" count="1" value="0x8866"> + <size name="GetQueryObjectivARB" mode="get"/> + <size name="GetQueryObjectuivARB" mode="get"/> + </enum> + <enum name="QUERY_RESULT_AVAILABLE_ARB" count="1" value="0x8867"> + <size name="GetQueryObjectivARB" mode="get"/> + <size name="GetQueryObjectuivARB" mode="get"/> + </enum> <enum name="SAMPLES_PASSED_ARB" value="0x8914"/> <function name="GenQueriesARB" offset="700"> <param name="n" type="GLsizei" counter="true"/> <param name="ids" type="GLuint *" output="true" count="n"/> - <glx ignore="true"/> + <glx sop="162"/> </function> <function name="DeleteQueriesARB" offset="701"> - <param name="n" type="GLsizei"/> - <param name="ids" type="const GLuint *"/> - <glx ignore="true"/> + <param name="n" type="GLsizei" counter="true"/> + <param name="ids" type="const GLuint *" count="n"/> + <glx sop="161"/> </function> <function name="IsQueryARB" offset="702"> <param name="id" type="GLuint"/> <return type="GLboolean"/> - <glx ignore="true"/> + <glx sop="163"/> </function> <function name="BeginQueryARB" offset="703"> <param name="target" type="GLenum"/> <param name="id" type="GLuint"/> - <glx ignore="true"/> + <glx rop="231"/> </function> <function name="EndQueryARB" offset="704"> <param name="target" type="GLenum"/> - <glx ignore="true"/> + <glx rop="232"/> </function> <function name="GetQueryivARB" offset="705"> <param name="target" type="GLenum"/> <param name="pname" type="GLenum"/> - <param name="params" type="GLint *" output="true"/> - <glx ignore="true"/> + <param name="params" type="GLint *" output="true" variable_param="pname"/> + <glx sop="164"/> </function> <function name="GetQueryObjectivARB" offset="706"> <param name="id" type="GLuint"/> <param name="pname" type="GLenum"/> - <param name="params" type="GLint *" output="true"/> - <glx ignore="true"/> + <param name="params" type="GLint *" output="true" variable_param="pname"/> + <glx sop="165"/> </function> <function name="GetQueryObjectuivARB" offset="707"> <param name="id" type="GLuint"/> <param name="pname" type="GLenum"/> - <param name="params" type="GLuint *" output="true"/> - <glx ignore="true"/> + <param name="params" type="GLuint *" output="true" variable_param="pname"/> + <glx sop="166"/> </function> </category> @@ -6467,7 +6481,7 @@ glx: <function name="DrawBuffersARB" offset="413"> <param name="n" type="GLsizei" counter="true"/> <param name="bufs" type="const GLenum *" count="n"/> - <glx ignore="true"/> + <glx rop="233" large="true"/> </function> </category> |