summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <anholt@FreeBSD.org>2005-10-24 06:40:56 +0000
committerEric Anholt <anholt@FreeBSD.org>2005-10-24 06:40:56 +0000
commitdc793d4e9a71159da13b9230abde344309924287 (patch)
treed2e68f18eb5f57e9dd82388ad651bb4c05e5b1f6
parent3265585b151d44c825fb7a82b16b076fb7fdca77 (diff)
Add support for GL_EXT_stencil_wrap by guessing that the skip of two values in
the register header was meaningful. It turns out those were the proper values for the plain INCR/DECR ops, while what we were using as INCR/DECR were the _WRAP versions. Tested with stencil_wrap (didn't expose normal/_WRAP swapping) and stencilwrap (exposed it nicely) tests. Props to idr for poking me about adding this.
-rw-r--r--src/mesa/drivers/dri/sis/sis_context.c1
-rw-r--r--src/mesa/drivers/dri/sis/sis_dd.c2
-rw-r--r--src/mesa/drivers/dri/sis/sis_reg.h18
-rw-r--r--src/mesa/drivers/dri/sis/sis_stencil.c18
4 files changed, 32 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/sis/sis_context.c b/src/mesa/drivers/dri/sis/sis_context.c
index 948f15a941..22ced964af 100644
--- a/src/mesa/drivers/dri/sis/sis_context.c
+++ b/src/mesa/drivers/dri/sis/sis_context.c
@@ -74,6 +74,7 @@ struct dri_extension card_extensions[] =
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
{ "GL_ARB_multitexture", NULL },
{ "GL_EXT_texture_lod_bias", NULL },
+ { "GL_EXT_stencil_wrap", NULL },
{ "GL_NV_blend_square", NULL },
{ NULL, NULL }
};
diff --git a/src/mesa/drivers/dri/sis/sis_dd.c b/src/mesa/drivers/dri/sis/sis_dd.c
index cd99270991..7dc3018157 100644
--- a/src/mesa/drivers/dri/sis/sis_dd.c
+++ b/src/mesa/drivers/dri/sis/sis_dd.c
@@ -47,7 +47,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "utils.h"
-#define DRIVER_DATE "20051019"
+#define DRIVER_DATE "20051023"
/* Return the width and height of the given buffer.
*/
diff --git a/src/mesa/drivers/dri/sis/sis_reg.h b/src/mesa/drivers/dri/sis/sis_reg.h
index 76014ff3ed..1c245898a4 100644
--- a/src/mesa/drivers/dri/sis/sis_reg.h
+++ b/src/mesa/drivers/dri/sis/sis_reg.h
@@ -589,23 +589,29 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#define SiS_SFAIL_KEEP 0x00000000
#define SiS_SFAIL_ZERO 0x00100000
#define SiS_SFAIL_REPLACE 0x00200000
+#define SiS_SFAIL_INCR 0x00300000 /* guess -- was _WRAP */
+#define SiS_SFAIL_DECR 0x00400000 /* guess -- was _WRAP */
#define SiS_SFAIL_INVERT 0x00500000
-#define SiS_SFAIL_INCR 0x00600000
-#define SiS_SFAIL_DECR 0x00700000
+#define SiS_SFAIL_INCR_WRAP 0x00600000 /* guess */
+#define SiS_SFAIL_DECR_WRAP 0x00700000 /* guess */
#define SiS_SPASS_ZFAIL_KEEP 0x00000000
#define SiS_SPASS_ZFAIL_ZERO 0x00010000
#define SiS_SPASS_ZFAIL_REPLACE 0x00020000
+#define SiS_SPASS_ZFAIL_INCR 0x00030000 /* guess -- was _WRAP */
+#define SiS_SPASS_ZFAIL_DECR 0x00040000 /* guess -- was _WRAP */
#define SiS_SPASS_ZFAIL_INVERT 0x00050000
-#define SiS_SPASS_ZFAIL_INCR 0x00060000
-#define SiS_SPASS_ZFAIL_DECR 0x00070000
+#define SiS_SPASS_ZFAIL_INCR_WRAP 0x00060000 /* guess */
+#define SiS_SPASS_ZFAIL_DECR_WRAP 0x00070000 /* guess */
#define SiS_SPASS_ZPASS_KEEP 0x00000000
#define SiS_SPASS_ZPASS_ZERO 0x00001000
#define SiS_SPASS_ZPASS_REPLACE 0x00002000
+#define SiS_SPASS_ZPASS_INCR 0x00003000 /* guess -- was _WRAP */
+#define SiS_SPASS_ZPASS_DECR 0x00004000 /* guess -- was _WRAP */
#define SiS_SPASS_ZPASS_INVERT 0x00005000
-#define SiS_SPASS_ZPASS_INCR 0x00006000
-#define SiS_SPASS_ZPASS_DECR 0x00007000
+#define SiS_SPASS_ZPASS_INCR_WRAP 0x00006000 /* guess */
+#define SiS_SPASS_ZPASS_DECR_WRAP 0x00007000 /* guess */
/*
* REG_3D_DstBlendMode (0x8A50 - 0x8A53)
diff --git a/src/mesa/drivers/dri/sis/sis_stencil.c b/src/mesa/drivers/dri/sis/sis_stencil.c
index d36f5f5909..1febe86b94 100644
--- a/src/mesa/drivers/dri/sis/sis_stencil.c
+++ b/src/mesa/drivers/dri/sis/sis_stencil.c
@@ -125,6 +125,12 @@ sisDDStencilOpSeparate( GLcontext * ctx, GLenum face, GLenum fail,
case GL_DECR:
current->hwStSetting2 |= SiS_SFAIL_DECR;
break;
+ case GL_INCR_WRAP:
+ current->hwStSetting2 |= SiS_SFAIL_INCR_WRAP;
+ break;
+ case GL_DECR_WRAP:
+ current->hwStSetting2 |= SiS_SFAIL_DECR_WRAP;
+ break;
}
switch (zfail)
@@ -147,6 +153,12 @@ sisDDStencilOpSeparate( GLcontext * ctx, GLenum face, GLenum fail,
case GL_DECR:
current->hwStSetting2 |= SiS_SPASS_ZFAIL_DECR;
break;
+ case GL_INCR_WRAP:
+ current->hwStSetting2 |= SiS_SPASS_ZFAIL_INCR_WRAP;
+ break;
+ case GL_DECR_WRAP:
+ current->hwStSetting2 |= SiS_SPASS_ZFAIL_DECR_WRAP;
+ break;
}
switch (zpass)
@@ -169,6 +181,12 @@ sisDDStencilOpSeparate( GLcontext * ctx, GLenum face, GLenum fail,
case GL_DECR:
current->hwStSetting2 |= SiS_SPASS_ZPASS_DECR;
break;
+ case GL_INCR_WRAP:
+ current->hwStSetting2 |= SiS_SPASS_ZPASS_INCR_WRAP;
+ break;
+ case GL_DECR_WRAP:
+ current->hwStSetting2 |= SiS_SPASS_ZPASS_DECR_WRAP;
+ break;
}
if (current->hwStSetting2 != prev->hwStSetting2)