From 9192ab3f5d90d27d852fbd23dc44f5062e399f62 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 24 Oct 2005 08:02:44 +0000 Subject: [PATCH] Add support for GL_ARB_texture_border_clamp and GL_ARB_texture_mirrored_repeat, tested using texwrap, fixing the sourcing of border constant values (use the bytes, not the floats!). Remove the fallback on GL_CLAMP_TO_EDGE, which acts properly, and add a note to GL_CLAMP about nonconformance (whcih is what the fallback for CLAMP_TO_EDGE was probably targeting). --- src/mesa/drivers/dri/sis/sis_context.c | 2 + src/mesa/drivers/dri/sis/sis_texstate.c | 51 +++++++++++++------------ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/mesa/drivers/dri/sis/sis_context.c b/src/mesa/drivers/dri/sis/sis_context.c index 22ced964af6..fab38474965 100644 --- a/src/mesa/drivers/dri/sis/sis_context.c +++ b/src/mesa/drivers/dri/sis/sis_context.c @@ -73,6 +73,8 @@ struct dri_extension card_extensions[] = { { "GL_ARB_multisample", GL_ARB_multisample_functions }, { "GL_ARB_multitexture", NULL }, + { "GL_ARB_texture_border_clamp", NULL }, + { "GL_ARB_texture_mirrored_repeat", NULL }, { "GL_EXT_texture_lod_bias", NULL }, { "GL_EXT_stencil_wrap", NULL }, { "GL_NV_blend_square", NULL }, diff --git a/src/mesa/drivers/dri/sis/sis_texstate.c b/src/mesa/drivers/dri/sis/sis_texstate.c index b5da62cd7c5..021919b0a42 100644 --- a/src/mesa/drivers/dri/sis/sis_texstate.c +++ b/src/mesa/drivers/dri/sis/sis_texstate.c @@ -383,14 +383,21 @@ sis_set_texobj_parm( GLcontext *ctx, struct gl_texture_object *texObj, case GL_REPEAT: current->texture[hw_unit].hwTextureSet |= MASK_TextureWrapU; break; + case GL_MIRRORED_REPEAT: + current->texture[hw_unit].hwTextureSet |= MASK_TextureMirrorU; + break; case GL_CLAMP: current->texture[hw_unit].hwTextureSet |= MASK_TextureClampU; + /* XXX: GL_CLAMP isn't conformant, but falling back makes the situation + * worse in other programs at the moment. + */ + /*ok = 0;*/ break; case GL_CLAMP_TO_EDGE: - /* - * ?? not support yet - */ - ok = 0; + current->texture[hw_unit].hwTextureSet |= MASK_TextureClampU; + break; + case GL_CLAMP_TO_BORDER: + current->texture[hw_unit].hwTextureSet |= MASK_TextureBorderU; break; } @@ -399,34 +406,30 @@ sis_set_texobj_parm( GLcontext *ctx, struct gl_texture_object *texObj, case GL_REPEAT: current->texture[hw_unit].hwTextureSet |= MASK_TextureWrapV; break; + case GL_MIRRORED_REPEAT: + current->texture[hw_unit].hwTextureSet |= MASK_TextureMirrorV; + break; case GL_CLAMP: current->texture[hw_unit].hwTextureSet |= MASK_TextureClampV; + /* XXX: GL_CLAMP isn't conformant, but falling back makes the situation + * worse in other programs at the moment. + */ + /*ok = 0;*/ break; case GL_CLAMP_TO_EDGE: - /* - * ?? not support yet - */ - ok = 0; + current->texture[hw_unit].hwTextureSet |= MASK_TextureClampV; break; - } - -/* - if (current->texture[hw_unit].hwTextureSet & MASK_TextureClampU) { - current->texture[hw_unit].hwTextureSet &= ~MASK_TextureClampU; - current->texture[hw_unit].hwTextureSet |= MASK_TextureBorderU; - } - - if (current->texture[hw_unit].hwTextureSet & MASK_TextureClampV) { - current->texture[hw_unit].hwTextureSet &= ~MASK_TextureClampV; + case GL_CLAMP_TO_BORDER: current->texture[hw_unit].hwTextureSet |= MASK_TextureBorderV; + break; } -*/ + current->texture[hw_unit].hwTextureBorderColor = - ((GLuint) texObj->BorderColor[3] << 24) + - ((GLuint) texObj->BorderColor[0] << 16) + - ((GLuint) texObj->BorderColor[1] << 8) + - ((GLuint) texObj->BorderColor[2]); - + ((GLuint) texObj->_BorderChan[3] << 24) + + ((GLuint) texObj->_BorderChan[0] << 16) + + ((GLuint) texObj->_BorderChan[1] << 8) + + ((GLuint) texObj->_BorderChan[2]); + if (current->texture[hw_unit].hwTextureBorderColor != prev->texture[hw_unit].hwTextureBorderColor) { -- 2.30.2