mesa: display list support for GL_EXT_texture_integer

This commit is contained in:
Brian Paul 2010-10-23 10:19:12 -06:00
parent 98bb70ac84
commit efd9e24312
1 changed files with 144 additions and 0 deletions

View File

@ -411,6 +411,12 @@ typedef enum
OPCODE_BEGIN_TRANSFORM_FEEDBACK,
OPCODE_END_TRANSFORM_FEEDBACK,
/* GL_EXT_texture_integer */
OPCODE_CLEARCOLOR_I,
OPCODE_CLEARCOLOR_UI,
OPCODE_TEXPARAMETER_I,
OPCODE_TEXPARAMETER_UI,
/* The following three are meta instructions */
OPCODE_ERROR, /* raise compiled-in error */
OPCODE_CONTINUE,
@ -6788,6 +6794,107 @@ save_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose,
}
/** GL_EXT_texture_integer */
static void GLAPIENTRY
save_ClearColorIi(GLint red, GLint green, GLint blue, GLint alpha)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_CLEARCOLOR_I, 4);
if (n) {
n[1].i = red;
n[2].i = green;
n[3].i = blue;
n[4].i = alpha;
}
if (ctx->ExecuteFlag) {
CALL_ClearColorIiEXT(ctx->Exec, (red, green, blue, alpha));
}
}
/** GL_EXT_texture_integer */
static void GLAPIENTRY
save_ClearColorIui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_CLEARCOLOR_UI, 4);
if (n) {
n[1].ui = red;
n[2].ui = green;
n[3].ui = blue;
n[4].ui = alpha;
}
if (ctx->ExecuteFlag) {
CALL_ClearColorIuiEXT(ctx->Exec, (red, green, blue, alpha));
}
}
/** GL_EXT_texture_integer */
static void GLAPIENTRY
save_TexParameterIiv(GLenum target, GLenum pname, const GLint *params)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXPARAMETER_I, 6);
if (n) {
n[1].e = target;
n[2].e = pname;
n[3].i = params[0];
n[4].i = params[1];
n[5].i = params[2];
n[6].i = params[3];
}
if (ctx->ExecuteFlag) {
CALL_TexParameterIivEXT(ctx->Exec, (target, pname, params));
}
}
/** GL_EXT_texture_integer */
static void GLAPIENTRY
save_TexParameterIuiv(GLenum target, GLenum pname, const GLuint *params)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXPARAMETER_UI, 6);
if (n) {
n[1].e = target;
n[2].e = pname;
n[3].ui = params[0];
n[4].ui = params[1];
n[5].ui = params[2];
n[6].ui = params[3];
}
if (ctx->ExecuteFlag) {
CALL_TexParameterIuivEXT(ctx->Exec, (target, pname, params));
}
}
/** GL_EXT_texture_integer */
static void GLAPIENTRY
exec_GetTexParameterIiv(GLenum target, GLenum pname, GLint *params)
{
GET_CURRENT_CONTEXT(ctx);
FLUSH_VERTICES(ctx, 0);
CALL_GetTexParameterIivEXT(ctx->Exec, (target, pname, params));
}
/** GL_EXT_texture_integer */
static void GLAPIENTRY
exec_GetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params)
{
GET_CURRENT_CONTEXT(ctx);
FLUSH_VERTICES(ctx, 0);
CALL_GetTexParameterIuivEXT(ctx->Exec, (target, pname, params));
}
/**
* Save an error-generating command into display list.
@ -7904,6 +8011,35 @@ execute_list(struct gl_context *ctx, GLuint list)
CALL_EvalPoint2(ctx->Exec, (n[1].i, n[2].i));
break;
/* GL_EXT_texture_integer */
case OPCODE_CLEARCOLOR_I:
CALL_ClearColorIiEXT(ctx->Exec, (n[1].i, n[2].i, n[3].i, n[4].i));
break;
case OPCODE_CLEARCOLOR_UI:
CALL_ClearColorIuiEXT(ctx->Exec,
(n[1].ui, n[2].ui, n[3].ui, n[4].ui));
break;
case OPCODE_TEXPARAMETER_I:
{
GLint params[4];
params[0] = n[3].i;
params[1] = n[4].i;
params[2] = n[5].i;
params[3] = n[6].i;
CALL_TexParameterIivEXT(ctx->Exec, (n[1].e, n[2].e, params));
}
break;
case OPCODE_TEXPARAMETER_UI:
{
GLuint params[4];
params[0] = n[3].ui;
params[1] = n[4].ui;
params[2] = n[5].ui;
params[3] = n[6].ui;
CALL_TexParameterIuivEXT(ctx->Exec, (n[1].e, n[2].e, params));
}
break;
case OPCODE_CONTINUE:
n = (Node *) n[1].next;
break;
@ -9532,6 +9668,14 @@ _mesa_create_save_table(void)
SET_ObjectUnpurgeableAPPLE(table, _mesa_ObjectUnpurgeableAPPLE);
#endif
/* GL_EXT_texture_integer */
SET_ClearColorIiEXT(table, save_ClearColorIi);
SET_ClearColorIuiEXT(table, save_ClearColorIui);
SET_TexParameterIivEXT(table, save_TexParameterIiv);
SET_TexParameterIuivEXT(table, save_TexParameterIuiv);
SET_GetTexParameterIivEXT(table, exec_GetTexParameterIiv);
SET_GetTexParameterIuivEXT(table, exec_GetTexParameterIuiv);
/* GL 3.0 */
#if 0
SET_ClearBufferiv(table, save_ClearBufferiv);