mesa: add EXT_dsa gl(Copy)Texture(Sub)Image1D/2D/3DEXT functions

Added functions:
- glTextureImage1DEXT
- glTextureImage2DEXT
- glTextureImage3DEXT
- glTextureSubImage1DEXT
- glTextureSubImage3DEXT
- glCopyTextureImage1DEXT
- glCopyTextureImage2DEXT
- glCopyTextureSubImage1DEXT
- glCopyTextureSubImage2DEXT
- glCopyTextureSubImage3DEXT
- glGetTextureImageEXT

All but the last one can be compiled in a display list.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2019-04-26 16:50:31 +02:00 committed by Marek Olšák
parent f8ad95c45f
commit 5fb9c9d628
8 changed files with 878 additions and 20 deletions

View file

@ -144,6 +144,56 @@
<param name="params" type="const float *" />
</function>
<function name="TextureImage1DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="internalFormat" type="GLint" />
<param name="width" type="GLsizei" />
<param name="border" type="GLint" />
<param name="format" type="GLenum" />
<param name="type" type="GLenum" />
<param name="pixels" type="const GLvoid *" />
</function>
<function name="TextureImage2DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="internalFormat" type="GLint" />
<param name="width" type="GLsizei" />
<param name="height" type="GLsizei" />
<param name="border" type="GLint" />
<param name="format" type="GLenum" />
<param name="type" type="GLenum" />
<param name="pixels" type="const GLvoid *" />
</function>
<function name="TextureImage3DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="internalFormat" type="GLint" />
<param name="width" type="GLsizei" />
<param name="height" type="GLsizei" />
<param name="depth" type="GLsizei" />
<param name="border" type="GLint" />
<param name="format" type="GLenum" />
<param name="type" type="GLenum" />
<param name="pixels" type="const GLvoid *" />
</function>
<function name="TextureSubImage1DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
<param name="width" type="GLsizei" />
<param name="format" type="GLenum" />
<param name="type" type="GLenum" />
<param name="pixels" type="const GLvoid *" />
</function>
<function name="TextureSubImage2DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
@ -157,6 +207,88 @@
<param name="pixels" type="const GLvoid *" />
</function>
<function name="TextureSubImage3DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
<param name="yoffset" type="GLint" />
<param name="zoffset" type="GLint" />
<param name="width" type="GLsizei" />
<param name="height" type="GLsizei" />
<param name="depth" type="GLsizei" />
<param name="format" type="GLenum" />
<param name="type" type="GLenum" />
<param name="pixels" type="const GLvoid *" />
</function>
<function name="CopyTextureImage1DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="internalFormat" type="GLenum" />
<param name="x" type="GLint" />
<param name="y" type="GLint" />
<param name="width" type="GLsizei" />
<param name="border" type="int" />
</function>
<function name="CopyTextureImage2DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="internalFormat" type="GLenum" />
<param name="x" type="GLint" />
<param name="y" type="GLint" />
<param name="width" type="GLsizei" />
<param name="height" type="GLsizei" />
<param name="border" type="int" />
</function>
<function name="CopyTextureSubImage1DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
<param name="x" type="GLint" />
<param name="y" type="GLint" />
<param name="width" type="GLsizei" />
</function>
<function name="CopyTextureSubImage2DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
<param name="yoffset" type="GLint" />
<param name="x" type="GLint" />
<param name="y" type="GLint" />
<param name="width" type="GLsizei" />
<param name="height" type="GLsizei" />
</function>
<function name="CopyTextureSubImage3DEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
<param name="yoffset" type="GLint" />
<param name="zoffset" type="GLint" />
<param name="x" type="GLint" />
<param name="y" type="GLint" />
<param name="width" type="GLsizei" />
<param name="height" type="GLsizei" />
</function>
<function name="GetTextureImageEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="level" type="GLint" />
<param name="format" type="GLenum" />
<param name="type" type="GLenum" />
<param name="pixels" type="GLvoid *" />
</function>
<!-- OpenGL 1.2.1 -->
<function name="BindMultiTextureEXT">

View file

@ -1478,15 +1478,26 @@ offsets = {
"NamedBufferSubDataEXT": 1442,
"NamedBufferStorageEXT": 1443,
"MapNamedBufferRangeEXT": 1444,
"TextureSubImage2DEXT": 1445,
"CompressedTextureSubImage2DEXT": 1446,
"MapNamedBufferEXT": 1447,
"GetTextureParameterivEXT": 1448,
"GetTextureParameterfvEXT": 1449,
"TextureParameteriEXT": 1450,
"TextureParameterivEXT": 1451,
"TextureParameterfEXT": 1452,
"TextureParameterfvEXT": 1453,
"TextureImage1DEXT": 1445,
"TextureImage2DEXT": 1446,
"TextureImage3DEXT": 1447,
"TextureSubImage1DEXT": 1448,
"TextureSubImage2DEXT": 1449,
"TextureSubImage3DEXT": 1450,
"CopyTextureImage1DEXT": 1451,
"CopyTextureImage2DEXT": 1452,
"CopyTextureSubImage1DEXT": 1453,
"CopyTextureSubImage2DEXT": 1454,
"CopyTextureSubImage3DEXT": 1455,
"CompressedTextureSubImage2DEXT": 1456,
"MapNamedBufferEXT": 1457,
"GetTextureParameterivEXT": 1458,
"GetTextureParameterfvEXT": 1459,
"TextureParameteriEXT": 1460,
"TextureParameterivEXT": 1461,
"TextureParameterfEXT": 1462,
"TextureParameterfvEXT": 1463,
"GetTextureImageEXT": 1464,
}
functions = [

View file

@ -570,7 +570,17 @@ typedef enum
OPCODE_MATRIX_POP,
OPCODE_TEXTUREPARAMETER_F,
OPCODE_TEXTUREPARAMETER_I,
OPCODE_TEXTURE_IMAGE1D,
OPCODE_TEXTURE_IMAGE2D,
OPCODE_TEXTURE_IMAGE3D,
OPCODE_TEXTURE_SUB_IMAGE1D,
OPCODE_TEXTURE_SUB_IMAGE2D,
OPCODE_TEXTURE_SUB_IMAGE3D,
OPCODE_COPY_TEXTURE_IMAGE1D,
OPCODE_COPY_TEXTURE_IMAGE2D,
OPCODE_COPY_TEXTURE_SUB_IMAGE1D,
OPCODE_COPY_TEXTURE_SUB_IMAGE2D,
OPCODE_COPY_TEXTURE_SUB_IMAGE3D,
OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_2D,
/* The following three are meta instructions */
@ -1205,10 +1215,25 @@ _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist)
case OPCODE_WINDOW_RECTANGLES:
free(get_pointer(&n[3]));
break;
case OPCODE_TEXTURE_IMAGE1D:
free(get_pointer(&n[9]));
break;
case OPCODE_TEXTURE_IMAGE2D:
free(get_pointer(&n[10]));
break;
case OPCODE_TEXTURE_IMAGE3D:
free(get_pointer(&n[11]));
break;
case OPCODE_TEXTURE_SUB_IMAGE1D:
free(get_pointer(&n[8]));
break;
case OPCODE_TEXTURE_SUB_IMAGE2D:
case OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_2D:
free(get_pointer(&n[10]));
break;
case OPCODE_TEXTURE_SUB_IMAGE3D:
free(get_pointer(&n[12]));
break;
case OPCODE_CONTINUE:
n = (Node *) get_pointer(&n[1]);
free(block);
@ -9531,6 +9556,153 @@ save_TextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint par
save_TextureParameterivEXT(texture, target, pname, fparam);
}
static void GLAPIENTRY
save_TextureImage1DEXT(GLuint texture, GLenum target,
GLint level, GLint components,
GLsizei width, GLint border,
GLenum format, GLenum type, const GLvoid * pixels)
{
GET_CURRENT_CONTEXT(ctx);
if (target == GL_PROXY_TEXTURE_1D) {
/* don't compile, execute immediately */
CALL_TextureImage1DEXT(ctx->Exec, (texture, target, level, components, width,
border, format, type, pixels));
}
else {
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXTURE_IMAGE1D, 8 + POINTER_DWORDS);
if (n) {
n[1].e = texture;
n[2].e = target;
n[3].i = level;
n[4].i = components;
n[5].i = (GLint) width;
n[6].i = border;
n[7].e = format;
n[8].e = type;
save_pointer(&n[9],
unpack_image(ctx, 1, width, 1, 1, format, type,
pixels, &ctx->Unpack));
}
if (ctx->ExecuteFlag) {
CALL_TextureImage1DEXT(ctx->Exec, (texture, target, level, components, width,
border, format, type, pixels));
}
}
}
static void GLAPIENTRY
save_TextureImage2DEXT(GLuint texture, GLenum target,
GLint level, GLint components,
GLsizei width, GLsizei height, GLint border,
GLenum format, GLenum type, const GLvoid * pixels)
{
GET_CURRENT_CONTEXT(ctx);
if (target == GL_PROXY_TEXTURE_2D) {
/* don't compile, execute immediately */
CALL_TextureImage2DEXT(ctx->Exec, (texture, target, level, components, width,
height, border, format, type, pixels));
}
else {
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXTURE_IMAGE2D, 9 + POINTER_DWORDS);
if (n) {
n[1].ui = texture;
n[2].e = target;
n[3].i = level;
n[4].i = components;
n[5].i = (GLint) width;
n[6].i = (GLint) height;
n[7].i = border;
n[8].e = format;
n[9].e = type;
save_pointer(&n[10],
unpack_image(ctx, 2, width, height, 1, format, type,
pixels, &ctx->Unpack));
}
if (ctx->ExecuteFlag) {
CALL_TextureImage2DEXT(ctx->Exec, (texture, target, level, components, width,
height, border, format, type, pixels));
}
}
}
static void GLAPIENTRY
save_TextureImage3DEXT(GLuint texture, GLenum target,
GLint level, GLint internalFormat,
GLsizei width, GLsizei height, GLsizei depth,
GLint border,
GLenum format, GLenum type, const GLvoid * pixels)
{
GET_CURRENT_CONTEXT(ctx);
if (target == GL_PROXY_TEXTURE_3D) {
/* don't compile, execute immediately */
CALL_TextureImage3DEXT(ctx->Exec, (texture, target, level, internalFormat, width,
height, depth, border, format, type,
pixels));
}
else {
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXTURE_IMAGE3D, 10 + POINTER_DWORDS);
if (n) {
n[1].ui = texture;
n[2].e = target;
n[3].i = level;
n[4].i = (GLint) internalFormat;
n[5].i = (GLint) width;
n[6].i = (GLint) height;
n[7].i = (GLint) depth;
n[8].i = border;
n[9].e = format;
n[10].e = type;
save_pointer(&n[11],
unpack_image(ctx, 3, width, height, depth, format, type,
pixels, &ctx->Unpack));
}
if (ctx->ExecuteFlag) {
CALL_TextureImage3DEXT(ctx->Exec, (texture, target, level, internalFormat,
width, height, depth, border, format,
type, pixels));
}
}
}
static void GLAPIENTRY
save_TextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset,
GLsizei width, GLenum format, GLenum type,
const GLvoid * pixels)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXTURE_SUB_IMAGE1D, 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].e = type;
save_pointer(&n[8],
unpack_image(ctx, 1, width, 1, 1, format, type,
pixels, &ctx->Unpack));
}
if (ctx->ExecuteFlag) {
CALL_TextureSubImage1DEXT(ctx->Exec, (texture, target, level, xoffset, width,
format, type, pixels));
}
}
static void GLAPIENTRY
save_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
@ -9563,6 +9735,176 @@ save_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
}
}
static void GLAPIENTRY
save_TextureSubImage3DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLenum type, const GLvoid * pixels)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXTURE_SUB_IMAGE3D, 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].e = type;
save_pointer(&n[12],
unpack_image(ctx, 3, width, height, depth, format, type,
pixels, &ctx->Unpack));
}
if (ctx->ExecuteFlag) {
CALL_TextureSubImage3DEXT(ctx->Exec, (texture, target, level,
xoffset, yoffset, zoffset,
width, height, depth, format, type,
pixels));
}
}
static void GLAPIENTRY
save_CopyTextureImage1DEXT(GLuint texture, GLenum target, GLint level,
GLenum internalformat, GLint x, GLint y,
GLsizei width, GLint border)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_COPY_TEXTURE_IMAGE1D, 8);
if (n) {
n[1].ui = texture;
n[2].e = target;
n[3].i = level;
n[4].e = internalformat;
n[5].i = x;
n[6].i = y;
n[7].i = width;
n[8].i = border;
}
if (ctx->ExecuteFlag) {
CALL_CopyTextureImage1DEXT(ctx->Exec, (texture, target, level,
internalformat, x, y,
width, border));
}
}
static void GLAPIENTRY
save_CopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level,
GLenum internalformat,
GLint x, GLint y, GLsizei width,
GLsizei height, GLint border)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_COPY_TEXTURE_IMAGE2D, 9);
if (n) {
n[1].ui = texture;
n[2].e = target;
n[3].i = level;
n[4].e = internalformat;
n[5].i = x;
n[6].i = y;
n[7].i = width;
n[8].i = height;
n[9].i = border;
}
if (ctx->ExecuteFlag) {
CALL_CopyTextureImage2DEXT(ctx->Exec, (texture, target, level,
internalformat, x, y,
width, height, border));
}
}
static void GLAPIENTRY
save_CopyTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint x, GLint y, GLsizei width)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_COPY_TEXTURE_SUB_IMAGE1D, 7);
if (n) {
n[1].ui = texture;
n[2].e = target;
n[3].i = level;
n[4].i = xoffset;
n[5].i = x;
n[6].i = y;
n[7].i = width;
}
if (ctx->ExecuteFlag) {
CALL_CopyTextureSubImage1DEXT(ctx->Exec,
(texture, target, level, xoffset, x, y, width));
}
}
static void GLAPIENTRY
save_CopyTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLint x, GLint y, GLsizei width, GLint height)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_COPY_TEXTURE_SUB_IMAGE2D, 9);
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 = x;
n[7].i = y;
n[8].i = width;
n[9].i = height;
}
if (ctx->ExecuteFlag) {
CALL_CopyTextureSubImage2DEXT(ctx->Exec, (texture, target, level,
xoffset, yoffset,
x, y, width, height));
}
}
static void GLAPIENTRY
save_CopyTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLint x, GLint y, GLsizei width, GLint height)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_COPY_TEXTURE_SUB_IMAGE3D, 10);
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 = x;
n[8].i = y;
n[9].i = width;
n[10].i = height;
}
if (ctx->ExecuteFlag) {
CALL_CopyTextureSubImage3DEXT(ctx->Exec, (texture, target, level,
xoffset, yoffset, zoffset,
x, y, width, height));
}
}
static void GLAPIENTRY
save_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset,
GLint yoffset, GLsizei width, GLsizei height,
@ -11181,6 +11523,67 @@ execute_list(struct gl_context *ctx, GLuint list)
CALL_TextureParameterivEXT(ctx->Exec, (n[1].ui, n[2].e, n[3].e, params));
}
break;
case OPCODE_TEXTURE_IMAGE1D:
{
const struct gl_pixelstore_attrib save = ctx->Unpack;
ctx->Unpack = ctx->DefaultPacking;
CALL_TextureImage1DEXT(ctx->Exec, (n[1].ui, /* texture */
n[2].e, /* target */
n[3].i, /* level */
n[4].i, /* components */
n[5].i, /* width */
n[6].e, /* border */
n[7].e, /* format */
n[8].e, /* type */
get_pointer(&n[9])));
ctx->Unpack = save; /* restore */
}
break;
case OPCODE_TEXTURE_IMAGE2D:
{
const struct gl_pixelstore_attrib save = ctx->Unpack;
ctx->Unpack = ctx->DefaultPacking;
CALL_TextureImage2DEXT(ctx->Exec, (n[1].ui, /* texture */
n[2].e, /* target */
n[3].i, /* level */
n[4].i, /* components */
n[5].i, /* width */
n[6].i, /* height */
n[7].e, /* border */
n[8].e, /* format */
n[9].e, /* type */
get_pointer(&n[10])));
ctx->Unpack = save; /* restore */
}
break;
case OPCODE_TEXTURE_IMAGE3D:
{
const struct gl_pixelstore_attrib save = ctx->Unpack;
ctx->Unpack = ctx->DefaultPacking;
CALL_TextureImage3DEXT(ctx->Exec, (n[1].ui, /* texture */
n[2].e, /* target */
n[3].i, /* level */
n[4].i, /* components */
n[5].i, /* width */
n[6].i, /* height */
n[7].i, /* depth */
n[8].e, /* border */
n[9].e, /* format */
n[10].e, /* type */
get_pointer(&n[11])));
ctx->Unpack = save; /* restore */
}
break;
case OPCODE_TEXTURE_SUB_IMAGE1D:
{
const struct gl_pixelstore_attrib save = ctx->Unpack;
ctx->Unpack = ctx->DefaultPacking;
CALL_TextureSubImage1DEXT(ctx->Exec, (n[1].ui, n[2].e, n[3].i,
n[4].i, n[5].i, n[6].e,
n[7].e, get_pointer(&n[8])));
ctx->Unpack = save; /* restore */
}
break;
case OPCODE_TEXTURE_SUB_IMAGE2D:
{
const struct gl_pixelstore_attrib save = ctx->Unpack;
@ -11192,6 +11595,44 @@ execute_list(struct gl_context *ctx, GLuint list)
ctx->Unpack = save;
}
break;
case OPCODE_TEXTURE_SUB_IMAGE3D:
{
const struct gl_pixelstore_attrib save = ctx->Unpack;
ctx->Unpack = ctx->DefaultPacking;
CALL_TextureSubImage3DEXT(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].e,
get_pointer(&n[12])));
ctx->Unpack = save; /* restore */
}
break;
case OPCODE_COPY_TEXTURE_IMAGE1D:
CALL_CopyTextureImage1DEXT(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));
break;
case OPCODE_COPY_TEXTURE_IMAGE2D:
CALL_CopyTextureImage2DEXT(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));
break;
case OPCODE_COPY_TEXTURE_SUB_IMAGE1D:
CALL_CopyTextureSubImage1DEXT(ctx->Exec, (n[1].ui, n[2].e, n[3].i,
n[4].i, n[5].i, n[6].i,
n[7].i));
break;
case OPCODE_COPY_TEXTURE_SUB_IMAGE2D:
CALL_CopyTextureSubImage2DEXT(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));
break;
case OPCODE_COPY_TEXTURE_SUB_IMAGE3D:
CALL_CopyTextureSubImage3DEXT(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].i));
break;
case OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_2D:
CALL_CompressedTextureSubImage2DEXT(ctx->Exec,
(n[1].ui, n[2].e, n[3].i, n[4].i,
@ -12194,7 +12635,17 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
SET_TextureParameterivEXT(table, save_TextureParameterivEXT);
SET_TextureParameterfEXT(table, save_TextureParameterfEXT);
SET_TextureParameterfvEXT(table, save_TextureParameterfvEXT);
SET_TextureImage1DEXT(table, save_TextureImage1DEXT);
SET_TextureImage2DEXT(table, save_TextureImage2DEXT);
SET_TextureImage3DEXT(table, save_TextureImage3DEXT);
SET_TextureSubImage1DEXT(table, save_TextureSubImage1DEXT);
SET_TextureSubImage2DEXT(table, save_TextureSubImage2DEXT);
SET_TextureSubImage3DEXT(table, save_TextureSubImage3DEXT);
SET_CopyTextureImage1DEXT(table, save_CopyTextureImage1DEXT);
SET_CopyTextureImage2DEXT(table, save_CopyTextureImage2DEXT);
SET_CopyTextureSubImage1DEXT(table, save_CopyTextureSubImage1DEXT);
SET_CopyTextureSubImage2DEXT(table, save_CopyTextureSubImage2DEXT);
SET_CopyTextureSubImage3DEXT(table, save_CopyTextureSubImage3DEXT);
SET_CompressedTextureSubImage2DEXT(table, save_CompressedTextureSubImage2DEXT);
}

View file

@ -1037,23 +1037,23 @@ const struct function common_desktop_functions_possible[] = {
{ "glTextureParameterivEXT", 11, -1 },
{ "glTextureParameterfEXT", 11, -1 },
{ "glTextureParameterfvEXT", 11, -1 },
//{ "glTextureImage1DEXT", 11, -1 },
//{ "glTextureImage2DEXT", 11, -1 },
//{ "glTextureSubImage1DEXT", 11, -1 },
{ "glTextureImage1DEXT", 11, -1 },
{ "glTextureImage2DEXT", 11, -1 },
{ "glTextureSubImage1DEXT", 11, -1 },
{ "glTextureSubImage2DEXT", 11, -1 },
//{ "glCopyTextureImage1DEXT", 11, -1 },
//{ "glCopyTextureImage2DEXT", 11, -1 },
//{ "glCopyTextureSubImage1DEXT", 11, -1 },
//{ "glCopyTextureSubImage2DEXT", 11, -1 },
//{ "glGetTextureImageEXT", 11, -1 },
{ "glCopyTextureImage1DEXT", 11, -1 },
{ "glCopyTextureImage2DEXT", 11, -1 },
{ "glCopyTextureSubImage1DEXT", 11, -1 },
{ "glCopyTextureSubImage2DEXT", 11, -1 },
{ "glGetTextureImageEXT", 11, -1 },
{ "glGetTextureParameterfvEXT", 11, -1 },
{ "glGetTextureParameterivEXT", 11, -1 },
//{ "glGetTextureLevelParameterfvEXT", 11, -1 },
//{ "glGetTextureLevelParameterivEXT", 11, -1 },
/* GL_EXT_direct_state_access - GL 1.2 */
//{ "glTextureImage3DEXT", 12, -1 },
//{ "glTextureSubImage3DEXT", 12, -1 },
//{ "glCopyTextureSubImage3DEXT", 12, -1 },
{ "glTextureImage3DEXT", 12, -1 },
{ "glTextureSubImage3DEXT", 12, -1 },
{ "glCopyTextureSubImage3DEXT", 12, -1 },
/* GL_EXT_direct_state_access - GL 1.2.1 */
{ "glBindMultiTextureEXT", 12, -1 },
//{ "glMultiTexCoordPointerEXT", 12, -1 },

View file

@ -1524,6 +1524,25 @@ _mesa_GetTextureImage(GLuint texture, GLint level, GLenum format, GLenum type,
}
void GLAPIENTRY
_mesa_GetTextureImageEXT(GLuint texture, GLenum target, GLint level,
GLenum format, GLenum type, GLvoid *pixels)
{
GET_CURRENT_CONTEXT(ctx);
static const char *caller = "glGetTextureImageEXT";
struct gl_texture_object *texObj =
_mesa_lookup_or_create_texture(ctx, target, texture,
false, true, caller);
if (!texObj) {
return;
}
_get_texture_image(ctx, texObj, target, level, format, type,
INT_MAX, pixels, caller);
}
void GLAPIENTRY
_mesa_GetTextureSubImage(GLuint texture, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,

View file

@ -61,6 +61,9 @@ _mesa_GetnTexImageARB( GLenum target, GLint level, GLenum format,
extern void GLAPIENTRY
_mesa_GetTextureImage(GLuint texture, GLint level, GLenum format,
GLenum type, GLsizei bufSize, GLvoid *pixels);
extern void GLAPIENTRY
_mesa_GetTextureImageEXT( GLuint texture, GLenum target, GLint level,
GLenum format, GLenum type, GLvoid *pixels);
extern void GLAPIENTRY
_mesa_GetTextureSubImage(GLuint texture, GLint level,

View file

@ -3196,6 +3196,21 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
border, format, type, 0, pixels);
}
void GLAPIENTRY
_mesa_TextureImage1DEXT(GLuint texture, GLenum target, GLint level,
GLint internalFormat, GLsizei width, GLint border,
GLenum format, GLenum type, const GLvoid *pixels )
{
struct gl_texture_object* texObj;
GET_CURRENT_CONTEXT(ctx);
texObj = _mesa_lookup_or_create_texture(ctx, target, texture, false, true,
"glTextureImage1DEXT");
if (!texObj)
return;
teximage(ctx, GL_FALSE, 1, texObj, target, level, internalFormat,
width, 1, 1, border, format, type, 0, pixels, false);
}
void GLAPIENTRY
_mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
@ -3208,6 +3223,22 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
border, format, type, 0, pixels);
}
void GLAPIENTRY
_mesa_TextureImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint internalFormat, GLsizei width, GLsizei height,
GLint border,
GLenum format, GLenum type, const GLvoid *pixels )
{
struct gl_texture_object* texObj;
GET_CURRENT_CONTEXT(ctx);
texObj = _mesa_lookup_or_create_texture(ctx, target, texture, false, true,
"glTextureImage2DEXT");
if (!texObj)
return;
teximage(ctx, GL_FALSE, 2, texObj, target, level, internalFormat,
width, height, 1, border, format, type, 0, pixels, false);
}
/*
* Called by the API or display list executor.
@ -3224,6 +3255,23 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
width, height, depth, border, format, type, 0, pixels);
}
void GLAPIENTRY
_mesa_TextureImage3DEXT(GLuint texture, GLenum target, GLint level,
GLint internalFormat, GLsizei width, GLsizei height,
GLsizei depth, GLint border,
GLenum format, GLenum type, const GLvoid *pixels )
{
struct gl_texture_object* texObj;
GET_CURRENT_CONTEXT(ctx);
texObj = _mesa_lookup_or_create_texture(ctx, target, texture, false, true,
"glTextureImage3DEXT");
if (!texObj)
return;
teximage(ctx, GL_FALSE, 3, texObj, target, level, internalFormat,
width, height, depth, border, format, type, 0, pixels, false);
}
void GLAPIENTRY
_mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat,
@ -3698,6 +3746,19 @@ _mesa_TextureSubImage1D_no_error(GLuint texture, GLint level, GLint xoffset,
}
void GLAPIENTRY
_mesa_TextureSubImage1DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLsizei width,
GLenum format, GLenum type,
const GLvoid *pixels)
{
GET_CURRENT_CONTEXT(ctx);
texturesubimage_error(ctx, 1, texture, target, level, xoffset, 0, 0, width, 1,
1, format, type, pixels, "glTextureSubImage1DEXT",
false);
}
void GLAPIENTRY
_mesa_TextureSubImage1D(GLuint texture, GLint level,
GLint xoffset, GLsizei width,
@ -3763,6 +3824,17 @@ _mesa_TextureSubImage3D_no_error(GLuint texture, GLint level, GLint xoffset,
pixels, "glTextureSubImage3D", false);
}
void GLAPIENTRY
_mesa_TextureSubImage3DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLenum type, const GLvoid *pixels)
{
GET_CURRENT_CONTEXT(ctx);
texturesubimage_error(ctx, 3, texture, target, level, xoffset, yoffset,
zoffset, width, height, depth, format, type,
pixels, "glTextureSubImage3DEXT", true);
}
void GLAPIENTRY
_mesa_TextureSubImage3D(GLuint texture, GLint level,
@ -4169,6 +4241,23 @@ _mesa_CopyTexImage1D( GLenum target, GLint level,
}
void GLAPIENTRY
_mesa_CopyTextureImage1DEXT( GLuint texture, GLenum target, GLint level,
GLenum internalFormat,
GLint x, GLint y,
GLsizei width, GLint border )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_object* texObj =
_mesa_lookup_or_create_texture(ctx, target, texture, false, true,
"glCopyTextureImage1DEXT");
if (!texObj)
return;
copyteximage(ctx, 1, texObj, target, level, internalFormat, x, y, width, 1,
border, false);
}
void GLAPIENTRY
_mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
GLint x, GLint y, GLsizei width, GLsizei height,
@ -4180,6 +4269,24 @@ _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
}
void GLAPIENTRY
_mesa_CopyTextureImage2DEXT( GLuint texture, GLenum target, GLint level,
GLenum internalFormat,
GLint x, GLint y,
GLsizei width, GLsizei height,
GLint border )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_object* texObj =
_mesa_lookup_or_create_texture(ctx, target, texture, false, true,
"glCopyTextureImage2DEXT");
if (!texObj)
return;
copyteximage(ctx, 2, texObj, target, level, internalFormat, x, y, width, height,
border, false);
}
void GLAPIENTRY
_mesa_CopyTexImage1D_no_error(GLenum target, GLint level, GLenum internalFormat,
GLint x, GLint y, GLsizei width, GLint border)
@ -4305,6 +4412,31 @@ _mesa_CopyTextureSubImage1D(GLuint texture, GLint level,
}
void GLAPIENTRY
_mesa_CopyTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint x, GLint y, GLsizei width)
{
struct gl_texture_object* texObj;
const char *self = "glCopyTextureSubImage1DEXT";
GET_CURRENT_CONTEXT(ctx);
texObj = _mesa_lookup_or_create_texture(ctx, target, texture, false, true,
self);
if (!texObj)
return;
/* Check target (proxies not allowed). */
if (!legal_texsubimage_target(ctx, 1, texObj->Target, true)) {
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid target %s)", self,
_mesa_enum_to_string(texObj->Target));
return;
}
copy_texture_sub_image_err(ctx, 1, texObj, texObj->Target, level, xoffset, 0,
0, x, y, width, 1, self);
}
void GLAPIENTRY
_mesa_CopyTextureSubImage2D(GLuint texture, GLint level,
GLint xoffset, GLint yoffset,
@ -4330,6 +4462,31 @@ _mesa_CopyTextureSubImage2D(GLuint texture, GLint level,
}
void GLAPIENTRY
_mesa_CopyTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLint x, GLint y, GLsizei width, GLsizei height)
{
struct gl_texture_object* texObj;
const char *self = "glCopyTextureSubImage2DEXT";
GET_CURRENT_CONTEXT(ctx);
texObj = _mesa_lookup_or_create_texture(ctx, target, texture, false, true, self);
if (!texObj)
return;
/* Check target (proxies not allowed). */
if (!legal_texsubimage_target(ctx, 2, texObj->Target, true)) {
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid target %s)", self,
_mesa_enum_to_string(texObj->Target));
return;
}
copy_texture_sub_image_err(ctx, 2, texObj, texObj->Target, level, xoffset,
yoffset, 0, x, y, width, height, self);
}
void GLAPIENTRY
_mesa_CopyTextureSubImage3D(GLuint texture, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
@ -4363,6 +4520,39 @@ _mesa_CopyTextureSubImage3D(GLuint texture, GLint level,
}
void GLAPIENTRY
_mesa_CopyTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLint x, GLint y, GLsizei width, GLsizei height)
{
struct gl_texture_object* texObj;
const char *self = "glCopyTextureSubImage3D";
GET_CURRENT_CONTEXT(ctx);
texObj = _mesa_lookup_or_create_texture(ctx, target, texture, false, true, self);
if (!texObj)
return;
/* Check target (proxies not allowed). */
if (!legal_texsubimage_target(ctx, 3, texObj->Target, true)) {
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid target %s)", self,
_mesa_enum_to_string(texObj->Target));
return;
}
if (texObj->Target == GL_TEXTURE_CUBE_MAP) {
/* Act like CopyTexSubImage2D */
copy_texture_sub_image_err(ctx, 2, texObj,
GL_TEXTURE_CUBE_MAP_POSITIVE_X + zoffset,
level, xoffset, yoffset, 0, x, y, width, height,
self);
}
else
copy_texture_sub_image_err(ctx, 3, texObj, texObj->Target, level, xoffset,
yoffset, zoffset, x, y, width, height, self);
}
void GLAPIENTRY
_mesa_CopyTexSubImage1D_no_error(GLenum target, GLint level, GLint xoffset,
GLint x, GLint y, GLsizei width)

View file

@ -261,18 +261,32 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalformat,
GLsizei width, GLint border,
GLenum format, GLenum type, const GLvoid *pixels );
extern void GLAPIENTRY
_mesa_TextureImage1DEXT( GLuint texture, GLenum target, GLint level,
GLint internalformat, GLsizei width, GLint border,
GLenum format, GLenum type, const GLvoid *pixels );
extern void GLAPIENTRY
_mesa_TexImage2D( GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border,
GLenum format, GLenum type, const GLvoid *pixels );
extern void GLAPIENTRY
_mesa_TextureImage2DEXT( GLuint texture, GLenum target, GLint level,
GLint internalformat, GLsizei width, GLsizei height,
GLint border, GLenum format, GLenum type,
const GLvoid *pixels );
extern void GLAPIENTRY
_mesa_TexImage3D( GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLsizei depth, GLint border,
GLenum format, GLenum type, const GLvoid *pixels );
extern void GLAPIENTRY
_mesa_TextureImage3DEXT( GLuint texture, GLenum target, GLint level,
GLint internalformat, GLsizei width, GLsizei height,
GLsizei depth, GLint border, GLenum format,
GLenum type, const GLvoid *pixels );
extern void GLAPIENTRY
_mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalformat,
@ -350,6 +364,12 @@ _mesa_TextureSubImage1D(GLuint texture, GLint level, GLint xoffset,
GLenum format, GLenum type,
const GLvoid *pixels);
extern void GLAPIENTRY
_mesa_TextureSubImage1DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLsizei width,
GLenum format, GLenum type,
const GLvoid *pixels);
void GLAPIENTRY
_mesa_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLsizei width,
@ -382,6 +402,12 @@ _mesa_TextureSubImage3D(GLuint texture, GLint level,
GLenum format, GLenum type,
const GLvoid *pixels);
extern void GLAPIENTRY
_mesa_TextureSubImage3DEXT(GLuint texture, GLenum target,
GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLsizei width, GLsizei height,
GLsizei depth, GLenum format, GLenum type,
const GLvoid *pixels);
extern void GLAPIENTRY
_mesa_CopyTexImage1D(GLenum target, GLint level, GLenum internalformat,
@ -393,6 +419,15 @@ _mesa_CopyTexImage2D( GLenum target, GLint level,
GLenum internalformat, GLint x, GLint y,
GLsizei width, GLsizei height, GLint border );
extern void GLAPIENTRY
_mesa_CopyTextureImage1DEXT( GLuint texture, GLenum target, GLint level,
GLenum internalformat, GLint x, GLint y,
GLsizei width, GLint border);
extern void GLAPIENTRY
_mesa_CopyTextureImage2DEXT( GLuint texture, GLenum target, GLint level,
GLenum internalformat, GLint x, GLint y,
GLsizei width, GLsizei height, GLint border );
extern void GLAPIENTRY
_mesa_CopyTexImage1D_no_error(GLenum target, GLint level, GLenum internalformat,
@ -425,18 +460,35 @@ extern void GLAPIENTRY
_mesa_CopyTextureSubImage1D(GLuint texture, GLint level,
GLint xoffset, GLint x, GLint y, GLsizei width);
extern void GLAPIENTRY
_mesa_CopyTextureSubImage1DEXT(GLuint texture, GLenum target,
GLint level, GLint xoffset, GLint x, GLint y,
GLsizei width);
extern void GLAPIENTRY
_mesa_CopyTextureSubImage2D(GLuint texture, GLint level,
GLint xoffset, GLint yoffset,
GLint x, GLint y,
GLsizei width, GLsizei height);
extern void GLAPIENTRY
_mesa_CopyTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLint x, GLint y,
GLsizei width, GLsizei height);
extern void GLAPIENTRY
_mesa_CopyTextureSubImage3D(GLuint texture, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLint x, GLint y,
GLsizei width, GLsizei height);
extern void GLAPIENTRY
_mesa_CopyTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLint x, GLint y,
GLsizei width, GLsizei height);
extern void GLAPIENTRY
_mesa_CopyTexSubImage1D_no_error(GLenum target, GLint level, GLint xoffset,
GLint x, GLint y, GLsizei width );