Add support for GL_EXT_stencil_wrap by guessing that the skip of two values in
authorEric Anholt <anholt@FreeBSD.org>
Mon, 24 Oct 2005 06:40:56 +0000 (06:40 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Mon, 24 Oct 2005 06:40:56 +0000 (06:40 +0000)
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.

src/mesa/drivers/dri/sis/sis_context.c
src/mesa/drivers/dri/sis/sis_dd.c
src/mesa/drivers/dri/sis/sis_reg.h
src/mesa/drivers/dri/sis/sis_stencil.c

index 948f15a94145ab33d67a476a9bbb51587f3751f2..22ced964af68b16fe2eb67262b48ea74dc716e25 100644 (file)
@@ -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 }
 };
index cd9927099142bd363e0d5616326d3957faedb13f..7dc3018157a5d86a01e8d64128feb00a25c185c0 100644 (file)
@@ -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.
  */
index 76014ff3eda759e220b1c0aa3dcf00cf33f4ac5a..1c245898a46d45c0305ab664b547b290f65a1673 100644 (file)
@@ -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)
index d36f5f59097c262edaf40cc8ba59fa5f0353b841..1febe86b94c60bde86b84e730a4f374096556639 100644 (file)
@@ -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)