added device driver function for texture proxy testing

This commit is contained in:
Brian Paul 2000-09-07 15:38:49 +00:00
parent 724f2939f4
commit 38d3f3d660
2 changed files with 64 additions and 19 deletions

View file

@ -1,8 +1,8 @@
/* $Id: dd.h,v 1.28 2000/08/29 23:31:23 brianp Exp $ */
/* $Id: dd.h,v 1.29 2000/09/07 15:38:49 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.4
* Version: 3.5
*
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
*
@ -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,

View file

@ -1,4 +1,4 @@
/* $Id: teximage.c,v 1.49 2000/09/06 15:15:43 brianp Exp $ */
/* $Id: teximage.c,v 1.50 2000/09/07 15:38:49 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -1701,10 +1701,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, postConvWidth, 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]);
@ -1840,10 +1846,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, postConvWidth, 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]);
@ -1863,7 +1875,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.
@ -1966,10 +1977,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]);
@ -2904,8 +2921,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]);
@ -3033,8 +3056,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]);
@ -3156,8 +3185,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]);