#include "api_exec.h"
#include "api_loopback.h"
#include "api_validate.h"
-#if FEATURE_ATI_fragment_shader
#include "atifragshader.h"
-#endif
#include "config.h"
#include "mfeatures.h"
#include "bufferobj.h"
#include "dlist.h"
#include "enums.h"
#include "eval.h"
-#if FEATURE_EXT_framebuffer_object
#include "fbobject.h"
-#endif
#include "framebuffer.h"
#include "glapi/glapi.h"
#include "glformats.h"
#include "texstorage.h"
#include "mtypes.h"
#include "varray.h"
-#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
#include "arbprogram.h"
-#endif
-#if FEATURE_NV_vertex_program || FEATURE_NV_fragment_program
#include "nvprogram.h"
-#endif
-#if FEATURE_EXT_transform_feedback
#include "transformfeedback.h"
-#endif
#include "math/m_matrix.h"
static GLuint InstSize[OPCODE_END_OF_LIST + 1];
-#if FEATURE_dlist
-
-
void mesa_print_display_list(GLuint list);
free(n[11].data);
n += InstSize[n[0].opcode];
break;
-#if FEATURE_NV_vertex_program
case OPCODE_LOAD_PROGRAM_NV:
free(n[4].data); /* program string */
n += InstSize[n[0].opcode];
free(n[2].data); /* array of program ids */
n += InstSize[n[0].opcode];
break;
-#endif
-#if FEATURE_NV_fragment_program
case OPCODE_PROGRAM_NAMED_PARAMETER_NV:
free(n[3].data); /* parameter name */
n += InstSize[n[0].opcode];
break;
-#endif
-#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
case OPCODE_PROGRAM_STRING_ARB:
free(n[4].data); /* program string */
n += InstSize[n[0].opcode];
break;
-#endif
case OPCODE_UNIFORM_1FV:
case OPCODE_UNIFORM_2FV:
case OPCODE_UNIFORM_3FV:
/*
* GL_NV_vertex_program
*/
-#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
static void GLAPIENTRY
save_BindProgramNV(GLenum target, GLuint id)
{
(GLfloat) params[2], (GLfloat) params[3]);
}
-#endif /* FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program || FEATURE_NV_vertex_program */
-#if FEATURE_NV_vertex_program
static void GLAPIENTRY
save_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params)
{
CALL_TrackMatrixNV(ctx->Exec, (target, address, matrix, transform));
}
}
-#endif /* FEATURE_NV_vertex_program */
/*
* GL_NV_fragment_program
*/
-#if FEATURE_NV_fragment_program
static void GLAPIENTRY
save_ProgramLocalParameter4fARB(GLenum target, GLuint index,
GLfloat x, GLfloat y, GLfloat z, GLfloat w)
(GLfloat) v[3]);
}
-#endif /* FEATURE_NV_fragment_program */
-
-
/* GL_EXT_stencil_two_side */
static void GLAPIENTRY
-#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
-
static void GLAPIENTRY
save_ProgramStringARB(GLenum target, GLenum format, GLsizei len,
const GLvoid * string)
}
}
-#endif /* FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program */
-
-
-#if FEATURE_queryobj
static void GLAPIENTRY
save_BeginQueryARB(GLenum target, GLuint id)
}
}
-#endif /* FEATURE_queryobj */
-
static void GLAPIENTRY
save_DrawBuffersARB(GLsizei count, const GLenum * buffers)
save_TexBumpParameterfvATI(pname, p);
}
-#if FEATURE_ATI_fragment_shader
static void GLAPIENTRY
save_BindFragmentShaderATI(GLuint id)
{
CALL_SetFragmentShaderConstantATI(ctx->Exec, (dst, value));
}
}
-#endif
static void GLAPIENTRY
save_Attr1fNV(GLenum attr, GLfloat x)
/* XXX more shader functions needed here */
-#if FEATURE_EXT_framebuffer_blit
static void GLAPIENTRY
save_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
mask, filter));
}
}
-#endif
/** GL_EXT_provoking_vertex */
case OPCODE_WINDOW_POS_ARB: /* GL_ARB_window_pos */
CALL_WindowPos3fMESA(ctx->Exec, (n[1].f, n[2].f, n[3].f));
break;
-#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
case OPCODE_BIND_PROGRAM_NV: /* GL_NV_vertex_program */
CALL_BindProgramNV(ctx->Exec, (n[1].e, n[2].ui));
break;
-#endif
-#if FEATURE_NV_vertex_program
case OPCODE_EXECUTE_PROGRAM_NV:
{
GLfloat v[4];
case OPCODE_TRACK_MATRIX_NV:
CALL_TrackMatrixNV(ctx->Exec, (n[1].e, n[2].ui, n[3].e, n[4].e));
break;
-#endif
-
-#if FEATURE_NV_fragment_program
case OPCODE_PROGRAM_LOCAL_PARAMETER_ARB:
CALL_ProgramLocalParameter4fARB(ctx->Exec,
(n[1].e, n[2].ui, n[3].f, n[4].f,
data, n[4].f, n[5].f,
n[6].f, n[7].f));
break;
-#endif
-
case OPCODE_ACTIVE_STENCIL_FACE_EXT:
CALL_ActiveStencilFaceEXT(ctx->Exec, (n[1].e));
break;
case OPCODE_DEPTH_BOUNDS_EXT:
CALL_DepthBoundsEXT(ctx->Exec, (n[1].f, n[2].f));
break;
-#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
case OPCODE_PROGRAM_STRING_ARB:
CALL_ProgramStringARB(ctx->Exec,
(n[1].e, n[2].e, n[3].i, n[4].data));
break;
-#endif
-#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program || FEATURE_NV_vertex_program
case OPCODE_PROGRAM_ENV_PARAMETER_ARB:
CALL_ProgramEnvParameter4fARB(ctx->Exec, (n[1].e, n[2].ui, n[3].f,
n[4].f, n[5].f,
n[6].f));
break;
-#endif
-#if FEATURE_queryobj
case OPCODE_BEGIN_QUERY_ARB:
CALL_BeginQueryARB(ctx->Exec, (n[1].e, n[2].ui));
break;
case OPCODE_END_QUERY_INDEXED:
CALL_EndQueryIndexed(ctx->Exec, (n[1].e, n[2].ui));
break;
-#endif
case OPCODE_DRAW_BUFFERS_ARB:
{
GLenum buffers[MAX_DRAW_BUFFERS];
CALL_DrawBuffersARB(ctx->Exec, (n[1].i, buffers));
}
break;
-#if FEATURE_EXT_framebuffer_blit
case OPCODE_BLIT_FRAMEBUFFER:
CALL_BlitFramebufferEXT(ctx->Exec, (n[1].i, n[2].i, n[3].i, n[4].i,
n[5].i, n[6].i, n[7].i, n[8].i,
n[9].i, n[10].e));
break;
-#endif
-
case OPCODE_USE_PROGRAM:
CALL_UseProgramObjectARB(ctx->Exec, (n[1].ui));
break;
CALL_TexBumpParameterfvATI(ctx->Exec, (pname, values));
}
break;
-#if FEATURE_ATI_fragment_shader
case OPCODE_BIND_FRAGMENT_SHADER_ATI:
CALL_BindFragmentShaderATI(ctx->Exec, (n[1].i));
break;
CALL_SetFragmentShaderConstantATI(ctx->Exec, (dst, values));
}
break;
-#endif
case OPCODE_ATTR_1F_NV:
CALL_VertexAttrib1fNV(ctx->Exec, (n[1].e, n[2].f));
break;
* struct.
*/
struct _glapi_table *
-_mesa_create_save_table(void)
+_mesa_create_save_table(const struct gl_context *ctx)
{
struct _glapi_table *table;
if (table == NULL)
return NULL;
- _mesa_loopback_init_api_table(table);
+ _mesa_loopback_init_api_table(ctx, table);
/* GL 1.0 */
SET_Accum(table, save_Accum);
SET_MultiModeDrawArraysIBM(table, exec_MultiModeDrawArraysIBM);
SET_MultiModeDrawElementsIBM(table, exec_MultiModeDrawElementsIBM);
-#if FEATURE_NV_vertex_program
/* 233. GL_NV_vertex_program */
/* The following commands DO NOT go into display lists:
* AreProgramsResidentNV, IsProgramNV, GenProgramsNV, DeleteProgramsNV,
SET_ProgramParameters4fvNV(table, save_ProgramParameters4fvNV);
SET_TrackMatrixNV(table, save_TrackMatrixNV);
SET_VertexAttribPointerNV(table, _mesa_VertexAttribPointerNV);
-#endif
/* 244. GL_ATI_envmap_bumpmap */
SET_TexBumpParameterivATI(table, save_TexBumpParameterivATI);
SET_TexBumpParameterfvATI(table, save_TexBumpParameterfvATI);
/* 245. GL_ATI_fragment_shader */
-#if FEATURE_ATI_fragment_shader
SET_BindFragmentShaderATI(table, save_BindFragmentShaderATI);
SET_SetFragmentShaderConstantATI(table, save_SetFragmentShaderConstantATI);
-#endif
/* 282. GL_NV_fragment_program */
-#if FEATURE_NV_fragment_program
SET_ProgramNamedParameter4fNV(table, save_ProgramNamedParameter4fNV);
SET_ProgramNamedParameter4dNV(table, save_ProgramNamedParameter4dNV);
SET_ProgramNamedParameter4fvNV(table, save_ProgramNamedParameter4fvNV);
_mesa_GetProgramLocalParameterdvARB);
SET_GetProgramLocalParameterfvARB(table,
_mesa_GetProgramLocalParameterfvARB);
-#endif
/* 262. GL_NV_point_sprite */
SET_PointParameteriNV(table, save_PointParameteriNV);
/* ARB 26. GL_ARB_vertex_program */
/* ARB 27. GL_ARB_fragment_program */
-#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
/* glVertexAttrib* functions alias the NV ones, handled elsewhere */
SET_VertexAttribPointerARB(table, _mesa_VertexAttribPointerARB);
SET_EnableVertexAttribArrayARB(table, _mesa_EnableVertexAttribArrayARB);
_mesa_GetProgramLocalParameterfvARB);
SET_GetProgramivARB(table, _mesa_GetProgramivARB);
SET_GetProgramStringARB(table, _mesa_GetProgramStringARB);
-#endif
/* ARB 28. GL_ARB_vertex_buffer_object */
/* None of the extension's functions get compiled */
SET_MapBufferARB(table, _mesa_MapBufferARB);
SET_UnmapBufferARB(table, _mesa_UnmapBufferARB);
-#if FEATURE_queryobj
_mesa_init_queryobj_dispatch(table); /* glGetQuery, etc */
SET_BeginQueryARB(table, save_BeginQueryARB);
SET_EndQueryARB(table, save_EndQueryARB);
SET_QueryCounter(table, save_QueryCounter);
-#endif
SET_DrawBuffersARB(table, save_DrawBuffersARB);
-#if FEATURE_EXT_framebuffer_blit
SET_BlitFramebufferEXT(table, save_BlitFramebufferEXT);
-#endif
/* GL_ARB_shader_objects */
- _mesa_init_shader_dispatch(table); /* Plug in glCreate/Delete/Get, etc */
+ _mesa_init_shader_dispatch(ctx, table); /* Plug in glCreate/Delete/Get, etc */
SET_UseProgramObjectARB(table, save_UseProgramObjectARB);
SET_Uniform1fARB(table, save_Uniform1fARB);
SET_Uniform2fARB(table, save_Uniform2fARB);
SET_BlendEquationSeparateEXT(table, save_BlendEquationSeparateEXT);
/* GL_EXT_gpu_program_parameters */
-#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
SET_ProgramEnvParameters4fvEXT(table, save_ProgramEnvParameters4fvEXT);
SET_ProgramLocalParameters4fvEXT(table, save_ProgramLocalParameters4fvEXT);
-#endif
/* ARB 50. GL_ARB_map_buffer_range */
-#if FEATURE_ARB_map_buffer_range
SET_MapBufferRange(table, _mesa_MapBufferRange); /* no dlist save */
SET_FlushMappedBufferRange(table, _mesa_FlushMappedBufferRange); /* no dl */
-#endif
/* ARB 51. GL_ARB_texture_buffer_object */
SET_TexBufferARB(table, _mesa_TexBuffer); /* no dlist save */
SET_ProvokingVertexEXT(table, save_ProvokingVertexEXT);
/* 371. GL_APPLE_object_purgeable */
-#if FEATURE_APPLE_object_purgeable
SET_ObjectPurgeableAPPLE(table, _mesa_ObjectPurgeableAPPLE);
SET_ObjectUnpurgeableAPPLE(table, _mesa_ObjectUnpurgeableAPPLE);
SET_GetObjectParameterivAPPLE(table, _mesa_GetObjectParameterivAPPLE);
-#endif
/* GL_EXT_texture_integer */
SET_ClearColorIiEXT(table, save_ClearColorIi);
(void) save_Uniform4uiv;
#endif
-#if FEATURE_EXT_transform_feedback
/* These are not compiled into display lists: */
SET_BindBufferBaseEXT(table, _mesa_BindBufferBase);
SET_BindBufferOffsetEXT(table, _mesa_BindBufferOffsetEXT);
save_DrawTransformFeedbackInstanced);
SET_DrawTransformFeedbackStreamInstanced(table,
save_DrawTransformFeedbackStreamInstanced);
-#if FEATURE_queryobj
SET_BeginQueryIndexed(table, save_BeginQueryIndexed);
SET_EndQueryIndexed(table, save_EndQueryIndexed);
-#endif
-#endif
/* GL_ARB_instanced_arrays */
SET_VertexAttribDivisorARB(table, save_VertexAttribDivisor);
}
-#endif /* FEATURE_dlist */
-
-
/**
* Initialize display list state for given context.
*/
/* Display List group */
ctx->List.ListBase = 0;
-#if FEATURE_dlist
_mesa_save_vtxfmt_init(&ctx->ListState.ListVtxfmt);
-#endif
}