summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2000-09-07 15:30:48 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>2000-09-07 15:30:48 +0000
commit08056a38ee36b52844cda96aaf590576e46a74c0 (patch)
treed0eeba21aa01ee8282e682f178ebf1ce53093bd3 /src
parent2591e8f1db80d13ae19eb0165548d63c8bbbf9ea (diff)
added device driver function for texture proxy testing
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/dd.h12
-rw-r--r--src/mesa/main/teximage.c68
2 files changed, 62 insertions, 18 deletions
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 318f1e18554..992bf5a4331 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1,4 +1,4 @@
-/* $Id: dd.h,v 1.26.4.2 2000/08/29 22:58:57 brianp Exp $ */
+/* $Id: dd.h,v 1.26.4.3 2000/09/07 15:30:48 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -641,6 +641,16 @@ struct dd_function_table {
* Core Mesa will perform any image format/type conversions that are needed.
*/
+ GLboolean (*TestProxyTexImage)(GLcontext *ctx, GLenum target,
+ GLint level, GLint internalFormat,
+ GLenum format, GLenum type,
+ GLint width, GLint height,
+ GLint depth, GLint border);
+ /* Called by glTexImage[123]D when user specifies a proxy texture
+ * target. Return GL_TRUE if the proxy test passes, return GL_FALSE
+ * if the test fails.
+ */
+
GLboolean (*CompressedTexImage1D)( GLcontext *ctx, GLenum target,
GLint level, GLsizei imageSize,
const GLvoid *data,
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 41c288cd3c0..28d967d72ca 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -1,4 +1,3 @@
-/* $Id: teximage.c,v 1.39.4.4 2000/09/05 22:09:03 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -1537,10 +1536,16 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
gl_put_texobj_on_dirty_list( ctx, texObj );
ctx->NewState |= NEW_TEXTURING;
}
- else if (target==GL_PROXY_TEXTURE_1D) {
+ else if (target == GL_PROXY_TEXTURE_1D) {
/* Proxy texture: check for errors and update proxy state */
- if (texture_error_check(ctx, target, level, internalFormat,
- format, type, 1, width, 1, 1, border)) {
+ GLenum error = texture_error_check(ctx, target, level, internalFormat,
+ format, type, 1, width, 1, 1, border);
+ if (!error && ctx->Driver.TestProxyTexImage) {
+ error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
+ internalFormat, format, type,
+ width, 1, 1, border);
+ }
+ if (error) {
/* if error, clear all proxy texture image parameters */
if (level>=0 && level<ctx->Const.MaxTextureLevels) {
clear_proxy_teximage(ctx->Texture.Proxy1D->Image[level]);
@@ -1668,10 +1673,16 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
gl_put_texobj_on_dirty_list( ctx, texObj );
ctx->NewState |= NEW_TEXTURING;
}
- else if (target==GL_PROXY_TEXTURE_2D) {
+ else if (target == GL_PROXY_TEXTURE_2D) {
/* Proxy texture: check for errors and update proxy state */
- if (texture_error_check(ctx, target, level, internalFormat,
- format, type, 2, width, height, 1, border)) {
+ GLenum error = texture_error_check(ctx, target, level, internalFormat,
+ format, type, 2, width, height, 1, border);
+ if (!error && ctx->Driver.TestProxyTexImage) {
+ error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
+ internalFormat, format, type,
+ width, height, 1, border);
+ }
+ if (error) {
/* if error, clear all proxy texture image parameters */
if (level>=0 && level<ctx->Const.MaxTextureLevels) {
clear_proxy_teximage(ctx->Texture.Proxy2D->Image[level]);
@@ -1691,7 +1702,6 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
}
-
/*
* Called by the API or display list executor.
* Note that width and height include the border.
@@ -1792,10 +1802,16 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
gl_put_texobj_on_dirty_list( ctx, texObj );
ctx->NewState |= NEW_TEXTURING;
}
- else if (target==GL_PROXY_TEXTURE_3D) {
+ else if (target == GL_PROXY_TEXTURE_3D) {
/* Proxy texture: check for errors and update proxy state */
- if (texture_error_check(ctx, target, level, internalFormat,
- format, type, 3, width, height, depth, border)) {
+ GLenum error = texture_error_check(ctx, target, level, internalFormat,
+ format, type, 3, width, height, depth, border);
+ if (!error && ctx->Driver.TestProxyTexImage) {
+ error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
+ internalFormat, format, type,
+ width, height, depth, border);
+ }
+ if (error) {
/* if error, clear all proxy texture image parameters */
if (level>=0 && level<ctx->Const.MaxTextureLevels) {
clear_proxy_teximage(ctx->Texture.Proxy3D->Image[level]);
@@ -2739,8 +2755,14 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
}
else if (target == GL_PROXY_TEXTURE_1D) {
/* Proxy texture: check for errors and update proxy state */
- if (texture_error_check(ctx, target, level, internalFormat,
- GL_NONE, GL_NONE, 1, width, 1, 1, border)) {
+ GLenum error = texture_error_check(ctx, target, level, internalFormat,
+ GL_NONE, GL_NONE, 1, width, 1, 1, border);
+ if (!error && ctx->Driver.TestProxyTexImage) {
+ error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
+ internalFormat, GL_NONE, GL_NONE,
+ width, 1, 1, border);
+ }
+ if (error) {
/* if error, clear all proxy texture image parameters */
if (level>=0 && level<ctx->Const.MaxTextureLevels) {
clear_proxy_teximage(ctx->Texture.Proxy1D->Image[level]);
@@ -2868,8 +2890,14 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
}
else if (target == GL_PROXY_TEXTURE_2D) {
/* Proxy texture: check for errors and update proxy state */
- if (texture_error_check(ctx, target, level, internalFormat,
- GL_NONE, GL_NONE, 1, width, 1, 1, border)) {
+ GLenum error = texture_error_check(ctx, target, level, internalFormat,
+ GL_NONE, GL_NONE, 2, width, height, 1, border);
+ if (!error && ctx->Driver.TestProxyTexImage) {
+ error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
+ internalFormat, GL_NONE, GL_NONE,
+ width, height, 1, border);
+ }
+ if (error) {
/* if error, clear all proxy texture image parameters */
if (level>=0 && level<ctx->Const.MaxTextureLevels) {
clear_proxy_teximage(ctx->Texture.Proxy2D->Image[level]);
@@ -2991,8 +3019,14 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
}
else if (target == GL_PROXY_TEXTURE_3D) {
/* Proxy texture: check for errors and update proxy state */
- if (texture_error_check(ctx, target, level, internalFormat,
- GL_NONE, GL_NONE, 1, width, height, depth, border)) {
+ GLenum error = texture_error_check(ctx, target, level, internalFormat,
+ GL_NONE, GL_NONE, 1, width, height, depth, border);
+ if (!error && ctx->Driver.TestProxyTexImage) {
+ error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
+ internalFormat, GL_NONE, GL_NONE,
+ width, height, depth, border);
+ }
+ if (error) {
/* if error, clear all proxy texture image parameters */
if (level>=0 && level<ctx->Const.MaxTextureLevels) {
clear_proxy_teximage(ctx->Texture.Proxy3D->Image[level]);