summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/dlist.c
diff options
context:
space:
mode:
authorPierre-Eric Pelloux-Prayer <[email protected]>2019-05-23 11:40:11 +0200
committerMarek Olšák <[email protected]>2019-08-19 18:50:03 -0400
commita886025ef502c043bd1d908335f80c95b5f6ffe9 (patch)
tree94be707ccf7cc7a155c0215f13065d23eb0dec48 /src/mesa/main/dlist.c
parent8c76221886358ce9f1377507c317d3aa1b02d23c (diff)
mesa: add EXT_dsa glCompressedTex* functions display list support
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/mesa/main/dlist.c')
-rw-r--r--src/mesa/main/dlist.c239
1 files changed, 239 insertions, 0 deletions
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index be77c386d62..10b2f078ae8 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -596,7 +596,12 @@ typedef enum
OPCODE_COPY_MULTITEX_SUB_IMAGE2D,
OPCODE_COPY_MULTITEX_SUB_IMAGE3D,
OPCODE_MULTITEXENV,
+ OPCODE_COMPRESSED_TEXTURE_IMAGE_1D,
+ OPCODE_COMPRESSED_TEXTURE_IMAGE_2D,
+ OPCODE_COMPRESSED_TEXTURE_IMAGE_3D,
+ OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_1D,
OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_2D,
+ OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_3D,
/* The following three are meta instructions */
OPCODE_ERROR, /* raise compiled-in error */
@@ -1245,6 +1250,7 @@ _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist)
break;
case OPCODE_TEXTURE_SUB_IMAGE1D:
case OPCODE_MULTITEX_SUB_IMAGE1D:
+ case OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_1D:
free(get_pointer(&n[8]));
break;
case OPCODE_TEXTURE_SUB_IMAGE2D:
@@ -1254,8 +1260,18 @@ _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist)
break;
case OPCODE_TEXTURE_SUB_IMAGE3D:
case OPCODE_MULTITEX_SUB_IMAGE3D:
+ case OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_3D:
free(get_pointer(&n[12]));
break;
+ case OPCODE_COMPRESSED_TEXTURE_IMAGE_1D:
+ free(get_pointer(&n[8]));
+ break;
+ case OPCODE_COMPRESSED_TEXTURE_IMAGE_2D:
+ free(get_pointer(&n[9]));
+ break;
+ case OPCODE_COMPRESSED_TEXTURE_IMAGE_3D:
+ free(get_pointer(&n[10]));
+ break;
case OPCODE_CONTINUE:
n = (Node *) get_pointer(&n[1]);
free(block);
@@ -10430,6 +10446,158 @@ save_MultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint *
static void GLAPIENTRY
+save_CompressedTextureImage1DEXT(GLuint texture, GLenum target, GLint level,
+ GLenum internalFormat, GLsizei width,
+ GLint border, GLsizei imageSize,
+ const GLvoid * data)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (target == GL_PROXY_TEXTURE_1D) {
+ /* don't compile, execute immediately */
+ CALL_CompressedTextureImage1DEXT(ctx->Exec, (texture, target, level,
+ internalFormat, width,
+ border, imageSize,
+ data));
+ }
+ else {
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+
+ n = alloc_instruction(ctx, OPCODE_COMPRESSED_TEXTURE_IMAGE_1D,
+ 7 + POINTER_DWORDS);
+ if (n) {
+ n[1].ui = texture;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].e = internalFormat;
+ n[5].i = (GLint) width;
+ n[6].i = border;
+ n[7].i = imageSize;
+ save_pointer(&n[8],
+ copy_data(data, imageSize, "glCompressedTextureImage1DEXT"));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_CompressedTextureImage1DEXT(ctx->Exec,
+ (texture, target, level, internalFormat,
+ width, border, imageSize, data));
+ }
+ }
+}
+
+
+static void GLAPIENTRY
+save_CompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level,
+ GLenum internalFormat, GLsizei width,
+ GLsizei height, GLint border, GLsizei imageSize,
+ const GLvoid * data)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (target == GL_PROXY_TEXTURE_2D) {
+ /* don't compile, execute immediately */
+ CALL_CompressedTextureImage2DEXT(ctx->Exec, (texture, target, level,
+ internalFormat, width, height,
+ border, imageSize, data));
+ }
+ else {
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+
+ n = alloc_instruction(ctx, OPCODE_COMPRESSED_TEXTURE_IMAGE_2D,
+ 8 + POINTER_DWORDS);
+ if (n) {
+ n[1].ui = texture;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].e = internalFormat;
+ n[5].i = (GLint) width;
+ n[6].i = (GLint) height;
+ n[7].i = border;
+ n[8].i = imageSize;
+ save_pointer(&n[9],
+ copy_data(data, imageSize, "glCompressedTextureImage2DEXT"));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_CompressedTextureImage2DEXT(ctx->Exec,
+ (texture, target, level, internalFormat,
+ width, height, border, imageSize, data));
+ }
+ }
+}
+
+
+static void GLAPIENTRY
+save_CompressedTextureImage3DEXT(GLuint texture, GLenum target, GLint level,
+ GLenum internalFormat, GLsizei width,
+ GLsizei height, GLsizei depth, GLint border,
+ GLsizei imageSize, const GLvoid * data)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (target == GL_PROXY_TEXTURE_3D) {
+ /* don't compile, execute immediately */
+ CALL_CompressedTextureImage3DEXT(ctx->Exec, (texture, target, level,
+ internalFormat, width,
+ height, depth, border,
+ imageSize, data));
+ }
+ else {
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+
+ n = alloc_instruction(ctx, OPCODE_COMPRESSED_TEXTURE_IMAGE_3D,
+ 9 + POINTER_DWORDS);
+ if (n) {
+ n[1].ui = texture;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].e = internalFormat;
+ n[5].i = (GLint) width;
+ n[6].i = (GLint) height;
+ n[7].i = (GLint) depth;
+ n[8].i = border;
+ n[9].i = imageSize;
+ save_pointer(&n[10],
+ copy_data(data, imageSize, "glCompressedTextureImage3DEXT"));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_CompressedTextureImage3DEXT(ctx->Exec,
+ (texture, target, level, internalFormat,
+ width, height, depth, border, imageSize,
+ data));
+ }
+ }
+}
+
+
+static void GLAPIENTRY
+save_CompressedTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset,
+ GLsizei width, GLenum format,
+ GLsizei imageSize, const GLvoid * data)
+{
+ Node *n;
+ GET_CURRENT_CONTEXT(ctx);
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+
+ n = alloc_instruction(ctx, OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_1D,
+ 7 + POINTER_DWORDS);
+ if (n) {
+ n[1].ui = texture;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].i = xoffset;
+ n[5].i = (GLint) width;
+ n[6].e = format;
+ n[7].i = imageSize;
+ save_pointer(&n[8],
+ copy_data(data, imageSize, "glCompressedTextureSubImage1DEXT"));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_CompressedTextureSubImage1DEXT(ctx->Exec, (texture, target, level, xoffset,
+ width, format, imageSize, data));
+ }
+}
+
+
+static void GLAPIENTRY
save_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset,
GLint yoffset, GLsizei width, GLsizei height,
GLenum format, GLsizei imageSize,
@@ -10462,6 +10630,42 @@ save_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
}
+static void GLAPIENTRY
+save_CompressedTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset,
+ GLint yoffset, GLint zoffset, GLsizei width,
+ GLsizei height, GLsizei depth, GLenum format,
+ GLsizei imageSize, const GLvoid * data)
+{
+ Node *n;
+ GET_CURRENT_CONTEXT(ctx);
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+
+ n = alloc_instruction(ctx, OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_3D,
+ 11 + POINTER_DWORDS);
+ if (n) {
+ n[1].ui = texture;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].i = xoffset;
+ n[5].i = yoffset;
+ n[6].i = zoffset;
+ n[7].i = (GLint) width;
+ n[8].i = (GLint) height;
+ n[9].i = (GLint) depth;
+ n[10].e = format;
+ n[11].i = imageSize;
+ save_pointer(&n[12],
+ copy_data(data, imageSize, "glCompressedTextureSubImage3DEXT"));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_CompressedTextureSubImage3DEXT(ctx->Exec,
+ (texture, target, level, xoffset, yoffset,
+ zoffset, width, height, depth, format,
+ imageSize, data));
+ }
+}
+
+
/**
* Save an error-generating command into display list.
*
@@ -12300,12 +12504,42 @@ execute_list(struct gl_context *ctx, GLuint list)
CALL_MultiTexEnvfvEXT(ctx->Exec, (n[1].e, n[2].e, n[3].e, params));
}
break;
+ case OPCODE_COMPRESSED_TEXTURE_IMAGE_1D:
+ CALL_CompressedTextureImage1DEXT(ctx->Exec, (n[1].ui, n[2].e, n[3].i,
+ n[4].e, n[5].i, n[6].i,
+ n[7].i, get_pointer(&n[8])));
+ break;
+ case OPCODE_COMPRESSED_TEXTURE_IMAGE_2D:
+ CALL_CompressedTextureImage2DEXT(ctx->Exec, (n[1].ui, n[2].e, n[3].i,
+ n[4].e, n[5].i, n[6].i,
+ n[7].i, n[8].i,
+ get_pointer(&n[9])));
+ break;
+ case OPCODE_COMPRESSED_TEXTURE_IMAGE_3D:
+ CALL_CompressedTextureImage3DEXT(ctx->Exec, (n[1].ui, n[2].e, n[3].i,
+ n[4].e, n[5].i, n[6].i,
+ n[7].i, n[8].i, n[9].i,
+ get_pointer(&n[10])));
+ break;
+ case OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_1D:
+ CALL_CompressedTextureSubImage1DEXT(ctx->Exec,
+ (n[1].ui, n[2].e, n[3].i, n[4].i,
+ n[5].i, n[6].e, n[7].i,
+ get_pointer(&n[8])));
+ break;
case OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_2D:
CALL_CompressedTextureSubImage2DEXT(ctx->Exec,
(n[1].ui, n[2].e, n[3].i, n[4].i,
n[5].i, n[6].i, n[7].i, n[8].e,
n[9].i, get_pointer(&n[10])));
break;
+ case OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_3D:
+ CALL_CompressedTextureSubImage3DEXT(ctx->Exec,
+ (n[1].ui, n[2].e, n[3].i, n[4].i,
+ n[5].i, n[6].i, n[7].i, n[8].i,
+ n[9].i, n[10].e, n[11].i,
+ get_pointer(&n[12])));
+ break;
case OPCODE_CONTINUE:
n = (Node *) get_pointer(&n[1]);
@@ -13333,7 +13567,12 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
SET_MultiTexEnvfvEXT(table, save_MultiTexEnvfvEXT);
SET_MultiTexEnviEXT(table, save_MultiTexEnviEXT);
SET_MultiTexEnvivEXT(table, save_MultiTexEnvivEXT);
+ SET_CompressedTextureImage1DEXT(table, save_CompressedTextureImage1DEXT);
+ SET_CompressedTextureImage2DEXT(table, save_CompressedTextureImage2DEXT);
+ SET_CompressedTextureImage3DEXT(table, save_CompressedTextureImage3DEXT);
+ SET_CompressedTextureSubImage1DEXT(table, save_CompressedTextureSubImage1DEXT);
SET_CompressedTextureSubImage2DEXT(table, save_CompressedTextureSubImage2DEXT);
+ SET_CompressedTextureSubImage3DEXT(table, save_CompressedTextureSubImage3DEXT);
}