summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <anholt@FreeBSD.org>2005-10-24 08:02:44 +0000
committerEric Anholt <anholt@FreeBSD.org>2005-10-24 08:02:44 +0000
commit9192ab3f5d90d27d852fbd23dc44f5062e399f62 (patch)
tree7a0eb3b00efb1a341488425911ab0778ca3804f9
parent6efd595bf5a18186ffe159566710ba037442967e (diff)
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).
-rw-r--r--src/mesa/drivers/dri/sis/sis_context.c2
-rw-r--r--src/mesa/drivers/dri/sis/sis_texstate.c51
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 22ced964af..fab3847496 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 b5da62cd7c..021919b0a4 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)
{