From 2d8b8d3bd1c21c4840378d2ef412ae7eb7798bed Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tapani=20P=C3=A4lli?= Date: Fri, 25 Oct 2019 11:00:04 +0300 Subject: [PATCH] mesa: add [Program]Uniform*64ARB display list support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This is required for int64 to be enabled in compat profile. Signed-off-by: Tapani Pälli Acked-by: Marek Olšák Reviewed-by: Kenneth Graunke --- src/mesa/main/dlist.c | 1435 ++++++++++++++++++++++++++++++++++------- 1 file changed, 1207 insertions(+), 228 deletions(-) diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 5d73a4c670c..01c650acfaa 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -393,6 +393,40 @@ typedef enum OPCODE_UNIFORM_MATRIX34D, OPCODE_UNIFORM_MATRIX43D, + /* GL_ARB_gpu_shader_int64 */ + OPCODE_UNIFORM_1I64, + OPCODE_UNIFORM_2I64, + OPCODE_UNIFORM_3I64, + OPCODE_UNIFORM_4I64, + OPCODE_UNIFORM_1I64V, + OPCODE_UNIFORM_2I64V, + OPCODE_UNIFORM_3I64V, + OPCODE_UNIFORM_4I64V, + OPCODE_UNIFORM_1UI64, + OPCODE_UNIFORM_2UI64, + OPCODE_UNIFORM_3UI64, + OPCODE_UNIFORM_4UI64, + OPCODE_UNIFORM_1UI64V, + OPCODE_UNIFORM_2UI64V, + OPCODE_UNIFORM_3UI64V, + OPCODE_UNIFORM_4UI64V, + OPCODE_PROGRAM_UNIFORM_1I64, + OPCODE_PROGRAM_UNIFORM_2I64, + OPCODE_PROGRAM_UNIFORM_3I64, + OPCODE_PROGRAM_UNIFORM_4I64, + OPCODE_PROGRAM_UNIFORM_1I64V, + OPCODE_PROGRAM_UNIFORM_2I64V, + OPCODE_PROGRAM_UNIFORM_3I64V, + OPCODE_PROGRAM_UNIFORM_4I64V, + OPCODE_PROGRAM_UNIFORM_1UI64, + OPCODE_PROGRAM_UNIFORM_2UI64, + OPCODE_PROGRAM_UNIFORM_3UI64, + OPCODE_PROGRAM_UNIFORM_4UI64, + OPCODE_PROGRAM_UNIFORM_1UI64V, + OPCODE_PROGRAM_UNIFORM_2UI64V, + OPCODE_PROGRAM_UNIFORM_3UI64V, + OPCODE_PROGRAM_UNIFORM_4UI64V, + /* OpenGL 4.0 / GL_ARB_tessellation_shader */ OPCODE_PATCH_PARAMETER_I, OPCODE_PATCH_PARAMETER_FV_INNER, @@ -725,6 +759,11 @@ union float64_pair GLuint uint32[2]; }; +union int64_pair +{ + GLint64 int64; + GLint int32[2]; +}; #define ASSIGN_DOUBLE_TO_NODES(n, idx, value) \ do { \ @@ -734,6 +773,21 @@ union float64_pair n[idx+1].ui = tmp.uint32[1]; \ } while (0) +#define ASSIGN_UINT64_TO_NODES(n, idx, value) \ + do { \ + union uint64_pair tmp; \ + tmp.uint64 = value; \ + n[idx].ui = tmp.uint32[0]; \ + n[idx+1].ui = tmp.uint32[1]; \ + } while (0) + +#define ASSIGN_INT64_TO_NODES(n, idx, value) \ + do { \ + union int64_pair tmp; \ + tmp.int64 = value; \ + n[idx].i = tmp.int32[0]; \ + n[idx+1].i = tmp.int32[1]; \ + } while (0) /** * How many nodes to allocate at a time. Note that bulk vertex data @@ -1183,6 +1237,14 @@ _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist) case OPCODE_UNIFORM_2UIV: case OPCODE_UNIFORM_3UIV: case OPCODE_UNIFORM_4UIV: + case OPCODE_UNIFORM_1I64V: + case OPCODE_UNIFORM_2I64V: + case OPCODE_UNIFORM_3I64V: + case OPCODE_UNIFORM_4I64V: + case OPCODE_UNIFORM_1UI64V: + case OPCODE_UNIFORM_2UI64V: + case OPCODE_UNIFORM_3UI64V: + case OPCODE_UNIFORM_4UI64V: free(get_pointer(&n[3])); break; case OPCODE_UNIFORM_MATRIX22: @@ -1221,6 +1283,14 @@ _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist) case OPCODE_PROGRAM_UNIFORM_2UIV: case OPCODE_PROGRAM_UNIFORM_3UIV: case OPCODE_PROGRAM_UNIFORM_4UIV: + case OPCODE_PROGRAM_UNIFORM_1I64V: + case OPCODE_PROGRAM_UNIFORM_2I64V: + case OPCODE_PROGRAM_UNIFORM_3I64V: + case OPCODE_PROGRAM_UNIFORM_4I64V: + case OPCODE_PROGRAM_UNIFORM_1UI64V: + case OPCODE_PROGRAM_UNIFORM_2UI64V: + case OPCODE_PROGRAM_UNIFORM_3UI64V: + case OPCODE_PROGRAM_UNIFORM_4UI64V: free(get_pointer(&n[4])); break; case OPCODE_PROGRAM_UNIFORM_MATRIX22F: @@ -7843,640 +7913,1226 @@ save_UniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, } } - static void GLAPIENTRY -save_UseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program) +save_Uniform1i64ARB(GLint location, GLint64 x) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_USE_PROGRAM_STAGES, 3); + n = alloc_instruction(ctx, OPCODE_UNIFORM_1I64, 3); if (n) { - n[1].ui = pipeline; - n[2].ui = stages; - n[3].ui = program; + n[1].i = location; + ASSIGN_INT64_TO_NODES(n, 2, x); } if (ctx->ExecuteFlag) { - CALL_UseProgramStages(ctx->Exec, (pipeline, stages, program)); + CALL_Uniform1i64ARB(ctx->Exec, (location, x)); } } static void GLAPIENTRY -save_ProgramUniform1f(GLuint program, GLint location, GLfloat x) +save_Uniform2i64ARB(GLint location, GLint64 x, GLint64 y) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1F, 3); + n = alloc_instruction(ctx, OPCODE_UNIFORM_2I64, 5); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].f = x; + n[1].i = location; + ASSIGN_INT64_TO_NODES(n, 2, x); + ASSIGN_INT64_TO_NODES(n, 4, y); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1f(ctx->Exec, (program, location, x)); + CALL_Uniform2i64ARB(ctx->Exec, (location, x, y)); } } static void GLAPIENTRY -save_ProgramUniform2f(GLuint program, GLint location, GLfloat x, GLfloat y) +save_Uniform3i64ARB(GLint location, GLint64 x, GLint64 y, GLint64 z) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2F, 4); + n = alloc_instruction(ctx, OPCODE_UNIFORM_3I64, 7); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].f = x; - n[4].f = y; + n[1].i = location; + ASSIGN_INT64_TO_NODES(n, 2, x); + ASSIGN_INT64_TO_NODES(n, 4, y); + ASSIGN_INT64_TO_NODES(n, 6, z); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2f(ctx->Exec, (program, location, x, y)); + CALL_Uniform3i64ARB(ctx->Exec, (location, x, y, z)); } } static void GLAPIENTRY -save_ProgramUniform3f(GLuint program, GLint location, - GLfloat x, GLfloat y, GLfloat z) +save_Uniform4i64ARB(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3F, 5); + n = alloc_instruction(ctx, OPCODE_UNIFORM_4I64, 9); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].f = x; - n[4].f = y; - n[5].f = z; + n[1].i = location; + ASSIGN_INT64_TO_NODES(n, 2, x); + ASSIGN_INT64_TO_NODES(n, 4, y); + ASSIGN_INT64_TO_NODES(n, 6, z); + ASSIGN_INT64_TO_NODES(n, 8, w); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3f(ctx->Exec, (program, location, x, y, z)); + CALL_Uniform4i64ARB(ctx->Exec, (location, x, y, z, w)); } } static void GLAPIENTRY -save_ProgramUniform4f(GLuint program, GLint location, - GLfloat x, GLfloat y, GLfloat z, GLfloat w) +save_Uniform1i64vARB(GLint location, GLsizei count, const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4F, 6); + n = alloc_instruction(ctx, OPCODE_UNIFORM_1I64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].f = x; - n[4].f = y; - n[5].f = z; - n[6].f = w; + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 1 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4f(ctx->Exec, (program, location, x, y, z, w)); + CALL_Uniform1i64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform1fv(GLuint program, GLint location, GLsizei count, - const GLfloat *v) +save_Uniform2i64vARB(GLint location, GLsizei count, const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1FV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_UNIFORM_2I64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLfloat))); + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 2 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1fv(ctx->Exec, (program, location, count, v)); + CALL_Uniform2i64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform2fv(GLuint program, GLint location, GLsizei count, - const GLfloat *v) +save_Uniform3i64vARB(GLint location, GLsizei count, const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2FV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_UNIFORM_3I64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLfloat))); + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 3 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2fv(ctx->Exec, (program, location, count, v)); + CALL_Uniform3i64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform3fv(GLuint program, GLint location, GLsizei count, - const GLfloat *v) +save_Uniform4i64vARB(GLint location, GLsizei count, const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3FV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_UNIFORM_4I64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLfloat))); + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 4 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3fv(ctx->Exec, (program, location, count, v)); + CALL_Uniform4i64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform4fv(GLuint program, GLint location, GLsizei count, - const GLfloat *v) +save_Uniform1ui64ARB(GLint location, GLuint64 x) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4FV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_UNIFORM_1UI64, 3); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLfloat))); + n[1].i = location; + ASSIGN_UINT64_TO_NODES(n, 2, x); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4fv(ctx->Exec, (program, location, count, v)); + CALL_Uniform1ui64ARB(ctx->Exec, (location, x)); } } static void GLAPIENTRY -save_ProgramUniform1d(GLuint program, GLint location, GLdouble x) +save_Uniform2ui64ARB(GLint location, GLuint64 x, GLuint64 y) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1D, 4); + n = alloc_instruction(ctx, OPCODE_UNIFORM_2UI64, 5); if (n) { - n[1].ui = program; - n[2].i = location; - ASSIGN_DOUBLE_TO_NODES(n, 3, x); + n[1].i = location; + ASSIGN_UINT64_TO_NODES(n, 2, x); + ASSIGN_UINT64_TO_NODES(n, 4, y); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1d(ctx->Exec, (program, location, x)); + CALL_Uniform2ui64ARB(ctx->Exec, (location, x, y)); } } static void GLAPIENTRY -save_ProgramUniform2d(GLuint program, GLint location, GLdouble x, GLdouble y) +save_Uniform3ui64ARB(GLint location, GLuint64 x, GLuint64 y, GLuint64 z) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2D, 6); + n = alloc_instruction(ctx, OPCODE_UNIFORM_3UI64, 7); if (n) { - n[1].ui = program; - n[2].i = location; - ASSIGN_DOUBLE_TO_NODES(n, 3, x); - ASSIGN_DOUBLE_TO_NODES(n, 5, y); + n[1].i = location; + ASSIGN_UINT64_TO_NODES(n, 2, x); + ASSIGN_UINT64_TO_NODES(n, 4, y); + ASSIGN_UINT64_TO_NODES(n, 6, z); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2d(ctx->Exec, (program, location, x, y)); + CALL_Uniform3ui64ARB(ctx->Exec, (location, x, y, z)); } } static void GLAPIENTRY -save_ProgramUniform3d(GLuint program, GLint location, - GLdouble x, GLdouble y, GLdouble z) +save_Uniform4ui64ARB(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3D, 8); + n = alloc_instruction(ctx, OPCODE_UNIFORM_4UI64, 9); if (n) { - n[1].ui = program; - n[2].i = location; - ASSIGN_DOUBLE_TO_NODES(n, 3, x); - ASSIGN_DOUBLE_TO_NODES(n, 5, y); - ASSIGN_DOUBLE_TO_NODES(n, 7, z); + n[1].i = location; + ASSIGN_UINT64_TO_NODES(n, 2, x); + ASSIGN_UINT64_TO_NODES(n, 4, y); + ASSIGN_UINT64_TO_NODES(n, 6, z); + ASSIGN_UINT64_TO_NODES(n, 8, w); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3d(ctx->Exec, (program, location, x, y, z)); + CALL_Uniform4ui64ARB(ctx->Exec, (location, x, y, z, w)); } } static void GLAPIENTRY -save_ProgramUniform4d(GLuint program, GLint location, - GLdouble x, GLdouble y, GLdouble z, GLdouble w) +save_Uniform1ui64vARB(GLint location, GLsizei count, const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4D, 10); + n = alloc_instruction(ctx, OPCODE_UNIFORM_1UI64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - ASSIGN_DOUBLE_TO_NODES(n, 3, x); - ASSIGN_DOUBLE_TO_NODES(n, 5, y); - ASSIGN_DOUBLE_TO_NODES(n, 7, z); - ASSIGN_DOUBLE_TO_NODES(n, 9, w); + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 1 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4d(ctx->Exec, (program, location, x, y, z, w)); + CALL_Uniform1ui64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform1dv(GLuint program, GLint location, GLsizei count, - const GLdouble *v) +save_Uniform2ui64vARB(GLint location, GLsizei count, const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1DV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_UNIFORM_2UI64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLdouble))); + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 2 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1dv(ctx->Exec, (program, location, count, v)); + CALL_Uniform2ui64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform2dv(GLuint program, GLint location, GLsizei count, - const GLdouble *v) +save_Uniform3ui64vARB(GLint location, GLsizei count, const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2DV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_UNIFORM_3UI64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLdouble))); + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 3 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2dv(ctx->Exec, (program, location, count, v)); + CALL_Uniform3ui64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform3dv(GLuint program, GLint location, GLsizei count, - const GLdouble *v) +save_Uniform4ui64vARB(GLint location, GLsizei count, const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3DV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_UNIFORM_4UI64V, 2 + POINTER_DWORDS); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLdouble))); + n[1].i = location; + n[2].i = count; + save_pointer(&n[3], memdup(v, count * 4 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3dv(ctx->Exec, (program, location, count, v)); + CALL_Uniform4ui64vARB(ctx->Exec, (location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform4dv(GLuint program, GLint location, GLsizei count, - const GLdouble *v) +save_ProgramUniform1i64ARB(GLuint program, GLint location, GLint64 x) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4DV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1I64, 4); if (n) { n[1].ui = program; n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLdouble))); + ASSIGN_INT64_TO_NODES(n, 3, x); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4dv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform1i64ARB(ctx->Exec, (program, location, x)); } } static void GLAPIENTRY -save_ProgramUniform1i(GLuint program, GLint location, GLint x) +save_ProgramUniform2i64ARB(GLuint program, GLint location, GLint64 x, + GLint64 y) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1I, 3); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2I64, 6); if (n) { n[1].ui = program; n[2].i = location; - n[3].i = x; + ASSIGN_INT64_TO_NODES(n, 3, x); + ASSIGN_INT64_TO_NODES(n, 5, y); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1i(ctx->Exec, (program, location, x)); + CALL_ProgramUniform2i64ARB(ctx->Exec, (program, location, x, y)); } } static void GLAPIENTRY -save_ProgramUniform2i(GLuint program, GLint location, GLint x, GLint y) +save_ProgramUniform3i64ARB(GLuint program, GLint location, GLint64 x, + GLint64 y, GLint64 z) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2I, 4); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3I64, 8); if (n) { n[1].ui = program; n[2].i = location; - n[3].i = x; - n[4].i = y; + ASSIGN_INT64_TO_NODES(n, 3, x); + ASSIGN_INT64_TO_NODES(n, 5, y); + ASSIGN_INT64_TO_NODES(n, 7, z); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2i(ctx->Exec, (program, location, x, y)); + CALL_ProgramUniform3i64ARB(ctx->Exec, (program, location, x, y, z)); } } static void GLAPIENTRY -save_ProgramUniform3i(GLuint program, GLint location, - GLint x, GLint y, GLint z) +save_ProgramUniform4i64ARB(GLuint program, GLint location, GLint64 x, + GLint64 y, GLint64 z, GLint64 w) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3I, 5); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4I64, 10); if (n) { n[1].ui = program; n[2].i = location; - n[3].i = x; - n[4].i = y; - n[5].i = z; + ASSIGN_INT64_TO_NODES(n, 3, x); + ASSIGN_INT64_TO_NODES(n, 5, y); + ASSIGN_INT64_TO_NODES(n, 7, z); + ASSIGN_INT64_TO_NODES(n, 9, w); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3i(ctx->Exec, (program, location, x, y, z)); + CALL_ProgramUniform4i64ARB(ctx->Exec, (program, location, x, y, z, w)); } } static void GLAPIENTRY -save_ProgramUniform4i(GLuint program, GLint location, - GLint x, GLint y, GLint z, GLint w) +save_ProgramUniform1i64vARB(GLuint program, GLint location, GLsizei count, + const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4I, 6); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1I64V, 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; - n[3].i = x; - n[4].i = y; - n[5].i = z; - n[6].i = w; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4i(ctx->Exec, (program, location, x, y, z, w)); + CALL_ProgramUniform1i64vARB(ctx->Exec, (program, location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform1iv(GLuint program, GLint location, GLsizei count, - const GLint *v) +save_ProgramUniform2i64vARB(GLuint program, GLint location, GLsizei count, + const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1IV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2I64V, 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; n[3].i = count; - save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLint))); + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1iv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform2i64vARB(ctx->Exec, (program, location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform2iv(GLuint program, GLint location, GLsizei count, - const GLint *v) +save_ProgramUniform3i64vARB(GLuint program, GLint location, GLsizei count, + const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2IV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3I64V, 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; n[3].i = count; - save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLint))); + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2iv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform3i64vARB(ctx->Exec, (program, location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform3iv(GLuint program, GLint location, GLsizei count, - const GLint *v) +save_ProgramUniform4i64vARB(GLuint program, GLint location, GLsizei count, + const GLint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3IV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4I64V, 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; n[3].i = count; - save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLint))); + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3iv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform4i64vARB(ctx->Exec, (program, location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform4iv(GLuint program, GLint location, GLsizei count, - const GLint *v) +save_ProgramUniform1ui64ARB(GLuint program, GLint location, GLuint64 x) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4IV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1UI64, 4); if (n) { n[1].ui = program; n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLint))); + ASSIGN_UINT64_TO_NODES(n, 3, x); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4iv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform1ui64ARB(ctx->Exec, (program, location, x)); } } static void GLAPIENTRY -save_ProgramUniform1ui(GLuint program, GLint location, GLuint x) +save_ProgramUniform2ui64ARB(GLuint program, GLint location, GLuint64 x, + GLuint64 y) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1UI, 3); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2UI64, 6); if (n) { n[1].ui = program; n[2].i = location; - n[3].ui = x; + ASSIGN_UINT64_TO_NODES(n, 3, x); + ASSIGN_UINT64_TO_NODES(n, 5, y); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1ui(ctx->Exec, (program, location, x)); + CALL_ProgramUniform2ui64ARB(ctx->Exec, (program, location, x, y)); } } static void GLAPIENTRY -save_ProgramUniform2ui(GLuint program, GLint location, GLuint x, GLuint y) +save_ProgramUniform3ui64ARB(GLuint program, GLint location, GLuint64 x, + GLuint64 y, GLuint64 z) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2UI, 4); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3UI64, 8); if (n) { n[1].ui = program; n[2].i = location; - n[3].ui = x; - n[4].ui = y; + ASSIGN_UINT64_TO_NODES(n, 3, x); + ASSIGN_UINT64_TO_NODES(n, 5, y); + ASSIGN_UINT64_TO_NODES(n, 7, z); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2ui(ctx->Exec, (program, location, x, y)); + CALL_ProgramUniform3ui64ARB(ctx->Exec, (program, location, x, y, z)); } } static void GLAPIENTRY -save_ProgramUniform3ui(GLuint program, GLint location, - GLuint x, GLuint y, GLuint z) +save_ProgramUniform4ui64ARB(GLuint program, GLint location, GLuint64 x, + GLuint64 y, GLuint64 z, GLuint64 w) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3UI, 5); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4UI64, 10); if (n) { n[1].ui = program; n[2].i = location; - n[3].ui = x; - n[4].ui = y; - n[5].ui = z; + ASSIGN_UINT64_TO_NODES(n, 3, x); + ASSIGN_UINT64_TO_NODES(n, 5, y); + ASSIGN_UINT64_TO_NODES(n, 7, z); + ASSIGN_UINT64_TO_NODES(n, 9, w); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3ui(ctx->Exec, (program, location, x, y, z)); + CALL_ProgramUniform4i64ARB(ctx->Exec, (program, location, x, y, z, w)); } } static void GLAPIENTRY -save_ProgramUniform4ui(GLuint program, GLint location, - GLuint x, GLuint y, GLuint z, GLuint w) +save_ProgramUniform1ui64vARB(GLuint program, GLint location, GLsizei count, + const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4UI, 6); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1UI64V, + 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; - n[3].ui = x; - n[4].ui = y; - n[5].ui = z; - n[6].ui = w; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4ui(ctx->Exec, (program, location, x, y, z, w)); + CALL_ProgramUniform1ui64vARB(ctx->Exec, (program, location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform1uiv(GLuint program, GLint location, GLsizei count, - const GLuint *v) +save_ProgramUniform2ui64vARB(GLuint program, GLint location, GLsizei count, + const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1UIV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2UI64V, + 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; n[3].i = count; - save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLuint))); + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform1uiv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform2ui64vARB(ctx->Exec, (program, location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform2uiv(GLuint program, GLint location, GLsizei count, - const GLuint *v) +save_ProgramUniform3ui64vARB(GLuint program, GLint location, GLsizei count, + const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2UIV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3UI64V, + 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; n[3].i = count; - save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLuint))); + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform2uiv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform3ui64vARB(ctx->Exec, (program, location, count, v)); } } static void GLAPIENTRY -save_ProgramUniform3uiv(GLuint program, GLint location, GLsizei count, - const GLuint *v) +save_ProgramUniform4ui64vARB(GLuint program, GLint location, GLsizei count, + const GLuint64 *v) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3UIV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4UI64V, + 3 + POINTER_DWORDS); if (n) { n[1].ui = program; n[2].i = location; n[3].i = count; - save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLuint))); + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLuint64))); } if (ctx->ExecuteFlag) { - CALL_ProgramUniform3uiv(ctx->Exec, (program, location, count, v)); + CALL_ProgramUniform4ui64vARB(ctx->Exec, (program, location, count, v)); } } + static void GLAPIENTRY -save_ProgramUniform4uiv(GLuint program, GLint location, GLsizei count, - const GLuint *v) +save_UseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4UIV, 3 + POINTER_DWORDS); + n = alloc_instruction(ctx, OPCODE_USE_PROGRAM_STAGES, 3); if (n) { - n[1].ui = program; - n[2].i = location; - n[3].i = count; - save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLuint))); + n[1].ui = pipeline; + n[2].ui = stages; + n[3].ui = program; } if (ctx->ExecuteFlag) { - CALL_ProgramUniform4uiv(ctx->Exec, (program, location, count, v)); + CALL_UseProgramStages(ctx->Exec, (pipeline, stages, program)); } } static void GLAPIENTRY -save_ProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLfloat *v) +save_ProgramUniform1f(GLuint program, GLint location, GLfloat x) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_MATRIX22F, + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1F, 3); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].f = x; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1f(ctx->Exec, (program, location, x)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2f(GLuint program, GLint location, GLfloat x, GLfloat y) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2F, 4); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].f = x; + n[4].f = y; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2f(ctx->Exec, (program, location, x, y)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3f(GLuint program, GLint location, + GLfloat x, GLfloat y, GLfloat z) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3F, 5); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].f = x; + n[4].f = y; + n[5].f = z; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3f(ctx->Exec, (program, location, x, y, z)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4f(GLuint program, GLint location, + GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4F, 6); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].f = x; + n[4].f = y; + n[5].f = z; + n[6].f = w; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4f(ctx->Exec, (program, location, x, y, z, w)); + } +} + +static void GLAPIENTRY +save_ProgramUniform1fv(GLuint program, GLint location, GLsizei count, + const GLfloat *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1FV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLfloat))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1fv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2fv(GLuint program, GLint location, GLsizei count, + const GLfloat *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2FV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLfloat))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2fv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3fv(GLuint program, GLint location, GLsizei count, + const GLfloat *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3FV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLfloat))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3fv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4fv(GLuint program, GLint location, GLsizei count, + const GLfloat *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4FV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLfloat))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4fv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform1d(GLuint program, GLint location, GLdouble x) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1D, 4); + if (n) { + n[1].ui = program; + n[2].i = location; + ASSIGN_DOUBLE_TO_NODES(n, 3, x); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1d(ctx->Exec, (program, location, x)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2d(GLuint program, GLint location, GLdouble x, GLdouble y) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2D, 6); + if (n) { + n[1].ui = program; + n[2].i = location; + ASSIGN_DOUBLE_TO_NODES(n, 3, x); + ASSIGN_DOUBLE_TO_NODES(n, 5, y); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2d(ctx->Exec, (program, location, x, y)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3d(GLuint program, GLint location, + GLdouble x, GLdouble y, GLdouble z) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3D, 8); + if (n) { + n[1].ui = program; + n[2].i = location; + ASSIGN_DOUBLE_TO_NODES(n, 3, x); + ASSIGN_DOUBLE_TO_NODES(n, 5, y); + ASSIGN_DOUBLE_TO_NODES(n, 7, z); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3d(ctx->Exec, (program, location, x, y, z)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4d(GLuint program, GLint location, + GLdouble x, GLdouble y, GLdouble z, GLdouble w) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4D, 10); + if (n) { + n[1].ui = program; + n[2].i = location; + ASSIGN_DOUBLE_TO_NODES(n, 3, x); + ASSIGN_DOUBLE_TO_NODES(n, 5, y); + ASSIGN_DOUBLE_TO_NODES(n, 7, z); + ASSIGN_DOUBLE_TO_NODES(n, 9, w); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4d(ctx->Exec, (program, location, x, y, z, w)); + } +} + +static void GLAPIENTRY +save_ProgramUniform1dv(GLuint program, GLint location, GLsizei count, + const GLdouble *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1DV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLdouble))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1dv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2dv(GLuint program, GLint location, GLsizei count, + const GLdouble *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2DV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLdouble))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2dv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3dv(GLuint program, GLint location, GLsizei count, + const GLdouble *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3DV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLdouble))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3dv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4dv(GLuint program, GLint location, GLsizei count, + const GLdouble *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4DV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLdouble))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4dv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform1i(GLuint program, GLint location, GLint x) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1I, 3); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = x; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1i(ctx->Exec, (program, location, x)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2i(GLuint program, GLint location, GLint x, GLint y) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2I, 4); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = x; + n[4].i = y; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2i(ctx->Exec, (program, location, x, y)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3i(GLuint program, GLint location, + GLint x, GLint y, GLint z) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3I, 5); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = x; + n[4].i = y; + n[5].i = z; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3i(ctx->Exec, (program, location, x, y, z)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4i(GLuint program, GLint location, + GLint x, GLint y, GLint z, GLint w) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4I, 6); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = x; + n[4].i = y; + n[5].i = z; + n[6].i = w; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4i(ctx->Exec, (program, location, x, y, z, w)); + } +} + +static void GLAPIENTRY +save_ProgramUniform1iv(GLuint program, GLint location, GLsizei count, + const GLint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1IV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1iv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2iv(GLuint program, GLint location, GLsizei count, + const GLint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2IV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2iv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3iv(GLuint program, GLint location, GLsizei count, + const GLint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3IV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3iv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4iv(GLuint program, GLint location, GLsizei count, + const GLint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4IV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4iv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform1ui(GLuint program, GLint location, GLuint x) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1UI, 3); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].ui = x; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1ui(ctx->Exec, (program, location, x)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2ui(GLuint program, GLint location, GLuint x, GLuint y) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2UI, 4); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].ui = x; + n[4].ui = y; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2ui(ctx->Exec, (program, location, x, y)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3ui(GLuint program, GLint location, + GLuint x, GLuint y, GLuint z) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3UI, 5); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].ui = x; + n[4].ui = y; + n[5].ui = z; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3ui(ctx->Exec, (program, location, x, y, z)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4ui(GLuint program, GLint location, + GLuint x, GLuint y, GLuint z, GLuint w) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4UI, 6); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].ui = x; + n[4].ui = y; + n[5].ui = z; + n[6].ui = w; + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4ui(ctx->Exec, (program, location, x, y, z, w)); + } +} + +static void GLAPIENTRY +save_ProgramUniform1uiv(GLuint program, GLint location, GLsizei count, + const GLuint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_1UIV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 1 * sizeof(GLuint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform1uiv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform2uiv(GLuint program, GLint location, GLsizei count, + const GLuint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_2UIV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 2 * sizeof(GLuint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform2uiv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform3uiv(GLuint program, GLint location, GLsizei count, + const GLuint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_3UIV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 3 * sizeof(GLuint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform3uiv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniform4uiv(GLuint program, GLint location, GLsizei count, + const GLuint *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_4UIV, 3 + POINTER_DWORDS); + if (n) { + n[1].ui = program; + n[2].i = location; + n[3].i = count; + save_pointer(&n[4], memdup(v, count * 4 * sizeof(GLuint))); + } + if (ctx->ExecuteFlag) { + CALL_ProgramUniform4uiv(ctx->Exec, (program, location, count, v)); + } +} + +static void GLAPIENTRY +save_ProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, + GLboolean transpose, const GLfloat *v) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_UNIFORM_MATRIX22F, 4 + POINTER_DWORDS); if (n) { n[1].ui = program; @@ -12099,6 +12755,294 @@ execute_list(struct gl_context *ctx, GLuint list) (n[1].i, n[2].i, n[3].b, get_pointer(&n[4]))); break; + case OPCODE_UNIFORM_1I64: { + union int64_pair x; + + x.int32[0] = n[2].i; + x.int32[1] = n[3].i; + + CALL_Uniform1i64ARB(ctx->Exec, (n[1].i, x.int64)); + break; + } + case OPCODE_UNIFORM_2I64: { + union int64_pair x; + union int64_pair y; + + x.int32[0] = n[2].i; + x.int32[1] = n[3].i; + y.int32[0] = n[4].i; + y.int32[1] = n[5].i; + + CALL_Uniform2i64ARB(ctx->Exec, (n[1].i, x.int64, y.int64)); + break; + } + case OPCODE_UNIFORM_3I64: { + union int64_pair x; + union int64_pair y; + union int64_pair z; + + x.int32[0] = n[2].i; + x.int32[1] = n[3].i; + y.int32[0] = n[4].i; + y.int32[1] = n[5].i; + z.int32[0] = n[6].i; + z.int32[1] = n[7].i; + + + CALL_Uniform3i64ARB(ctx->Exec, (n[1].i, x.int64, y.int64, z.int64)); + break; + } + case OPCODE_UNIFORM_4I64: { + union int64_pair x; + union int64_pair y; + union int64_pair z; + union int64_pair w; + + x.int32[0] = n[2].i; + x.int32[1] = n[3].i; + y.int32[0] = n[4].i; + y.int32[1] = n[5].i; + z.int32[0] = n[6].i; + z.int32[1] = n[7].i; + w.int32[0] = n[8].i; + w.int32[1] = n[9].i; + + CALL_Uniform4i64ARB(ctx->Exec, (n[1].i, x.int64, y.int64, z.int64, w.int64)); + break; + } + case OPCODE_UNIFORM_1I64V: + CALL_Uniform1i64vARB(ctx->Exec, (n[1].i, n[2].i, get_pointer(&n[3]))); + break; + case OPCODE_UNIFORM_2I64V: + CALL_Uniform2i64vARB(ctx->Exec, (n[1].i, n[2].i, get_pointer(&n[3]))); + break; + case OPCODE_UNIFORM_3I64V: + CALL_Uniform3i64vARB(ctx->Exec, (n[1].i, n[2].i, get_pointer(&n[3]))); + break; + case OPCODE_UNIFORM_4I64V: + CALL_Uniform4i64vARB(ctx->Exec, (n[1].i, n[2].i, get_pointer(&n[3]))); + break; + case OPCODE_UNIFORM_1UI64: { + union uint64_pair x; + + x.uint32[0] = n[2].ui; + x.uint32[1] = n[3].ui; + + CALL_Uniform1ui64ARB(ctx->Exec, (n[1].i, x.uint64)); + break; + } + case OPCODE_UNIFORM_2UI64: { + union uint64_pair x; + union uint64_pair y; + + x.uint32[0] = n[2].ui; + x.uint32[1] = n[3].ui; + y.uint32[0] = n[4].ui; + y.uint32[1] = n[5].ui; + + CALL_Uniform2ui64ARB(ctx->Exec, (n[1].i, x.uint64, y.uint64)); + break; + } + case OPCODE_UNIFORM_3UI64: { + union uint64_pair x; + union uint64_pair y; + union uint64_pair z; + + x.uint32[0] = n[2].ui; + x.uint32[1] = n[3].ui; + y.uint32[0] = n[4].ui; + y.uint32[1] = n[5].ui; + z.uint32[0] = n[6].ui; + z.uint32[1] = n[7].ui; + + + CALL_Uniform3ui64ARB(ctx->Exec, (n[1].i, x.uint64, y.uint64, + z.uint64)); + break; + } + case OPCODE_UNIFORM_4UI64: { + union uint64_pair x; + union uint64_pair y; + union uint64_pair z; + union uint64_pair w; + + x.uint32[0] = n[2].ui; + x.uint32[1] = n[3].ui; + y.uint32[0] = n[4].ui; + y.uint32[1] = n[5].ui; + z.uint32[0] = n[6].ui; + z.uint32[1] = n[7].ui; + w.uint32[0] = n[8].ui; + w.uint32[1] = n[9].ui; + + CALL_Uniform4ui64ARB(ctx->Exec, (n[1].i, x.uint64, y.uint64, + z.uint64, w.uint64)); + break; + } + case OPCODE_UNIFORM_1UI64V: + CALL_Uniform1ui64vARB(ctx->Exec, (n[1].i, n[2].i, + get_pointer(&n[3]))); + break; + case OPCODE_UNIFORM_2UI64V: + CALL_Uniform2ui64vARB(ctx->Exec, (n[1].i, n[2].i, + get_pointer(&n[3]))); + break; + case OPCODE_UNIFORM_3UI64V: + CALL_Uniform3ui64vARB(ctx->Exec, (n[1].i, n[2].i, + get_pointer(&n[3]))); + break; + case OPCODE_UNIFORM_4UI64V: + CALL_Uniform4ui64vARB(ctx->Exec, (n[1].i, n[2].i, + get_pointer(&n[3]))); + break; + + case OPCODE_PROGRAM_UNIFORM_1I64: { + union int64_pair x; + + x.int32[0] = n[3].i; + x.int32[1] = n[4].i; + + CALL_ProgramUniform1i64ARB(ctx->Exec, (n[1].ui, n[2].i, x.int64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_2I64: { + union int64_pair x; + union int64_pair y; + + x.int32[0] = n[3].i; + x.int32[1] = n[4].i; + y.int32[0] = n[5].i; + y.int32[1] = n[6].i; + + CALL_ProgramUniform2i64ARB(ctx->Exec, (n[1].ui, n[2].i, x.int64, + y.int64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_3I64: { + union int64_pair x; + union int64_pair y; + union int64_pair z; + + x.int32[0] = n[3].i; + x.int32[1] = n[4].i; + y.int32[0] = n[5].i; + y.int32[1] = n[6].i; + z.int32[0] = n[7].i; + z.int32[1] = n[8].i; + + CALL_ProgramUniform3i64ARB(ctx->Exec, (n[1].ui, n[2].i, x.int64, + y.int64, z.int64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_4I64: { + union int64_pair x; + union int64_pair y; + union int64_pair z; + union int64_pair w; + + x.int32[0] = n[3].i; + x.int32[1] = n[4].i; + y.int32[0] = n[5].i; + y.int32[1] = n[6].i; + z.int32[0] = n[7].i; + z.int32[1] = n[8].i; + w.int32[0] = n[9].i; + w.int32[1] = n[10].i; + + CALL_ProgramUniform4i64ARB(ctx->Exec, (n[1].ui, n[2].i, x.int64, + y.int64, z.int64, w.int64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_1I64V: + CALL_ProgramUniform1i64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_PROGRAM_UNIFORM_2I64V: + CALL_ProgramUniform2i64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_PROGRAM_UNIFORM_3I64V: + CALL_ProgramUniform3i64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_PROGRAM_UNIFORM_4I64V: + CALL_ProgramUniform4i64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_PROGRAM_UNIFORM_1UI64: { + union uint64_pair x; + + x.uint32[0] = n[3].ui; + x.uint32[1] = n[4].ui; + + CALL_ProgramUniform1i64ARB(ctx->Exec, (n[1].ui, n[2].i, x.uint64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_2UI64: { + union uint64_pair x; + union uint64_pair y; + + x.uint32[0] = n[3].ui; + x.uint32[1] = n[4].ui; + y.uint32[0] = n[5].ui; + y.uint32[1] = n[6].ui; + + CALL_ProgramUniform2ui64ARB(ctx->Exec, (n[1].ui, n[2].i, x.uint64, + y.uint64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_3UI64: { + union uint64_pair x; + union uint64_pair y; + union uint64_pair z; + + x.uint32[0] = n[3].ui; + x.uint32[1] = n[4].ui; + y.uint32[0] = n[5].ui; + y.uint32[1] = n[6].ui; + z.uint32[0] = n[7].ui; + z.uint32[1] = n[8].ui; + + CALL_ProgramUniform3ui64ARB(ctx->Exec, (n[1].ui, n[2].i, x.uint64, + y.uint64, z.uint64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_4UI64: { + union uint64_pair x; + union uint64_pair y; + union uint64_pair z; + union uint64_pair w; + + x.uint32[0] = n[3].ui; + x.uint32[1] = n[4].ui; + y.uint32[0] = n[5].ui; + y.uint32[1] = n[6].ui; + z.uint32[0] = n[7].ui; + z.uint32[1] = n[8].ui; + w.uint32[0] = n[9].ui; + w.uint32[1] = n[10].ui; + + CALL_ProgramUniform4ui64ARB(ctx->Exec, (n[1].ui, n[2].i, x.uint64, + y.uint64, z.uint64, w.uint64)); + break; + } + case OPCODE_PROGRAM_UNIFORM_1UI64V: + CALL_ProgramUniform1ui64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_PROGRAM_UNIFORM_2UI64V: + CALL_ProgramUniform2ui64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_PROGRAM_UNIFORM_3UI64V: + CALL_ProgramUniform3ui64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_PROGRAM_UNIFORM_4UI64V: + CALL_ProgramUniform4ui64vARB(ctx->Exec, (n[1].ui, n[2].i, n[3].i, + get_pointer(&n[4]))); + break; + case OPCODE_USE_PROGRAM_STAGES: CALL_UseProgramStages(ctx->Exec, (n[1].ui, n[2].ui, n[3].ui)); break; @@ -13877,6 +14821,41 @@ _mesa_initialize_save_table(const struct gl_context *ctx) SET_UniformMatrix3x4dv(table, save_UniformMatrix3x4dv); SET_UniformMatrix4x3dv(table, save_UniformMatrix4x3dv); + /* GL_ARB_gpu_shader_int64 */ + SET_Uniform1i64ARB(table, save_Uniform1i64ARB); + SET_Uniform2i64ARB(table, save_Uniform2i64ARB); + SET_Uniform3i64ARB(table, save_Uniform3i64ARB); + SET_Uniform4i64ARB(table, save_Uniform4i64ARB); + SET_Uniform1i64vARB(table, save_Uniform1i64vARB); + SET_Uniform2i64vARB(table, save_Uniform2i64vARB); + SET_Uniform3i64vARB(table, save_Uniform3i64vARB); + SET_Uniform4i64vARB(table, save_Uniform4i64vARB); + SET_Uniform1ui64ARB(table, save_Uniform1ui64ARB); + SET_Uniform2ui64ARB(table, save_Uniform2ui64ARB); + SET_Uniform3ui64ARB(table, save_Uniform3ui64ARB); + SET_Uniform4ui64ARB(table, save_Uniform4ui64ARB); + SET_Uniform1ui64vARB(table, save_Uniform1ui64vARB); + SET_Uniform2ui64vARB(table, save_Uniform2ui64vARB); + SET_Uniform3ui64vARB(table, save_Uniform3ui64vARB); + SET_Uniform4ui64vARB(table, save_Uniform4ui64vARB); + + SET_ProgramUniform1i64ARB(table, save_ProgramUniform1i64ARB); + SET_ProgramUniform2i64ARB(table, save_ProgramUniform2i64ARB); + SET_ProgramUniform3i64ARB(table, save_ProgramUniform3i64ARB); + SET_ProgramUniform4i64ARB(table, save_ProgramUniform4i64ARB); + SET_ProgramUniform1i64vARB(table, save_ProgramUniform1i64vARB); + SET_ProgramUniform2i64vARB(table, save_ProgramUniform2i64vARB); + SET_ProgramUniform3i64vARB(table, save_ProgramUniform3i64vARB); + SET_ProgramUniform4i64vARB(table, save_ProgramUniform4i64vARB); + SET_ProgramUniform1ui64ARB(table, save_ProgramUniform1ui64ARB); + SET_ProgramUniform2ui64ARB(table, save_ProgramUniform2ui64ARB); + SET_ProgramUniform3ui64ARB(table, save_ProgramUniform3ui64ARB); + SET_ProgramUniform4ui64ARB(table, save_ProgramUniform4ui64ARB); + SET_ProgramUniform1ui64vARB(table, save_ProgramUniform1ui64vARB); + SET_ProgramUniform2ui64vARB(table, save_ProgramUniform2ui64vARB); + SET_ProgramUniform3ui64vARB(table, save_ProgramUniform3ui64vARB); + SET_ProgramUniform4ui64vARB(table, save_ProgramUniform4ui64vARB); + /* These are: */ SET_BeginTransformFeedback(table, save_BeginTransformFeedback); SET_EndTransformFeedback(table, save_EndTransformFeedback); -- 2.30.2