Leif Delgass wrote:
On Wed, 30 Apr 2003, Ian Romanick wrote:


After cleaning up some of the left-over issues from the texmem merge, I did a quick check low-hanging fruit functionality that could be added so some of the drivers. In doing so, I notied that neither the r128 driver or the radeon driver support EXT_stencil_wrap. Since this extension is part of the 1.4 core spec, it seems like a fairly important one to add. According to Delph3D, EXT_stencil_wrap is supported by both of these chips.

http://www.delphi3d.net/hardware/extsupport.php?extension=GL_EXT_stencil_wrap

I did some experimentation with the radeon driver and the stencilwrap test (in the tests directory in Mesa). I made a small modification to is so that it would log errors and continue on. I modified the radeon drivers to use the same values for GL_INCR_WRAP and GL_DECR_WRAP as the R200 driver (all of the other stencil op values are the same). The interesting thing that I noticed is that RADEON_STENCIL_*_DEC behaves like R200_STENCIL_*_DEC_WRAP should. Using R200_STENCIL_*_INC_WRAP on the R100 behaves like RADEON_STENCIL_*_INVERT, but R200_STENCIL_*_DEC_WRAP works correctly.


I just did the same patch/test here on Radeon 7500 and the stencilwrap test works fine. INC/DEC saturate as expected and INC_WRAP/DEC_WRAP wrap correctly. I'm attaching the patch I used.

I think the *only* difference between your patch and mine is that I used the GL 1.4 names and you used the EXT names.


The Rage 128 driver doesn't currently support a hardware stencil, but I've
been working on getting that going as well. So far, I've found that using
the same bits for stencil wrap modes as R100/R200 does work, but there are
problems with readback. The r128 driver calls ioctls in the drm that blit
to and from an AGP span buffer to implement Read/DrawPixels for the depth
buffer. This seems to be in order to avoid having to convert
coords/offsets to account for depth buffer tiling. At any rate, the
problem I see in readback seems to indicate some sort of caching problem. I modified stencilwrap in the same way you did to continue and report
errors. I see off-by-one errors that vary (in a seemingly random way) in
number and value from one run to the next. That is, I get a few "old" values and then things seem to "catch up." I'd like to do some more testing and see if I can reproduce the same behavior with the depth component values.

That's interesting. I think the problems I was seeing with stencil on i830 were just read-back errors as well.


At any rate, I'd like to commit the attached patch, but it would be good
to get some more data points from R100 users.  Testing has convinced me
that the stencil wrap register settings are the same for all the ATI cards
we have drivers for that support a hardware stencil, but I don't have docs
for R100 or Rage 128.

I think there was some bug in the 7200 that was fixed in the 7500. I have attached my version of stencilwrap.c, my output from stencilwrap.c, and my patch to the driver. I should be able to try this out on an M6 and possibly a 7000 a little later today. We may be able to enable this, but only on certain "versions" of the R100 chip. :(


According to 'lspci -vv -n', my Radeon is a 1002:5144, subsystem 1002:008a. It's one of the original Radeon 32MB DDR cards...from way before the funky numbering system. :)
Index: lib/GL/mesa/src/drv/radeon/radeon_context.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/radeon/radeon_context.c,v
retrieving revision 1.38
diff -u -d -r1.38 radeon_context.c
--- lib/GL/mesa/src/drv/radeon/radeon_context.c 26 May 2003 19:48:51 -0000      1.38
+++ lib/GL/mesa/src/drv/radeon/radeon_context.c 28 May 2003 15:03:00 -0000
@@ -130,6 +130,7 @@
     "GL_EXT_blend_logic_op",
     "GL_EXT_blend_subtract",
     "GL_EXT_secondary_color",
+    "GL_EXT_stencil_wrap",
     "GL_EXT_texture_edge_clamp",
     "GL_EXT_texture_env_add",
     "GL_EXT_texture_env_combine",
Index: lib/GL/mesa/src/drv/radeon/radeon_state.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/radeon/radeon_state.c,v
retrieving revision 1.28
diff -u -d -r1.28 radeon_state.c
--- lib/GL/mesa/src/drv/radeon/radeon_state.c   30 Apr 2003 01:50:52 -0000      1.28
+++ lib/GL/mesa/src/drv/radeon/radeon_state.c   28 May 2003 15:03:00 -0000
@@ -1295,6 +1295,12 @@
    case GL_DECR:
       rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_DEC;
       break;
+   case GL_INCR_WRAP:
+      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_INC_WRAP;
+      break;
+   case GL_DECR_WRAP:
+      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_DEC_WRAP;
+      break;
    case GL_INVERT:
       rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_INVERT;
       break;
@@ -1316,6 +1322,12 @@
    case GL_DECR:
       rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_DEC;
       break;
+   case GL_INCR_WRAP:
+      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_INC_WRAP;
+      break;
+   case GL_DECR_WRAP:
+      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_DEC_WRAP;
+      break;
    case GL_INVERT:
       rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_INVERT;
       break;
@@ -1336,6 +1348,12 @@
       break;
    case GL_DECR:
       rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_DEC;
+      break;
+   case GL_INCR_WRAP:
+      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_INC_WRAP;
+      break;
+   case GL_DECR_WRAP:
+      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_DEC_WRAP;
       break;
    case GL_INVERT:
       rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_INVERT;
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h,v
retrieving revision 1.28
diff -u -d -r1.28 radeon_reg.h
--- programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h        13 May 2003 21:46:41 
-0000      1.28
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h        28 May 2003 15:03:00 
-0000
@@ -1524,6 +1524,8 @@
 #       define RADEON_STENCIL_FAIL_INC           (3  << 16)
 #       define RADEON_STENCIL_FAIL_DEC           (4  << 16)
 #       define RADEON_STENCIL_FAIL_INVERT        (5  << 16)
+#       define RADEON_STENCIL_FAIL_INC_WRAP      (6  << 16)
+#       define RADEON_STENCIL_FAIL_DEC_WRAP      (7  << 16)
 #       define RADEON_STENCIL_FAIL_MASK          (0x7 << 16)
 #       define RADEON_STENCIL_ZPASS_KEEP         (0  << 20)
 #       define RADEON_STENCIL_ZPASS_ZERO         (1  << 20)
@@ -1531,6 +1533,8 @@
 #       define RADEON_STENCIL_ZPASS_INC          (3  << 20)
 #       define RADEON_STENCIL_ZPASS_DEC          (4  << 20)
 #       define RADEON_STENCIL_ZPASS_INVERT       (5  << 20)
+#       define RADEON_STENCIL_ZPASS_INC_WRAP     (6  << 20)
+#       define RADEON_STENCIL_ZPASS_DEC_WRAP     (7  << 20)
 #       define RADEON_STENCIL_ZPASS_MASK         (0x7 << 20)
 #       define RADEON_STENCIL_ZFAIL_KEEP         (0  << 24)
 #       define RADEON_STENCIL_ZFAIL_ZERO         (1  << 24)
@@ -1538,6 +1542,8 @@
 #       define RADEON_STENCIL_ZFAIL_INC          (3  << 24)
 #       define RADEON_STENCIL_ZFAIL_DEC          (4  << 24)
 #       define RADEON_STENCIL_ZFAIL_INVERT       (5  << 24)
+#       define RADEON_STENCIL_ZFAIL_INC_WRAP     (6  << 24)
+#       define RADEON_STENCIL_ZFAIL_DEC_WRAP     (7  << 24)
 #       define RADEON_STENCIL_ZFAIL_MASK         (0x7 << 24)
 #       define RADEON_Z_COMPRESSION_ENABLE       (1  << 28)
 #       define RADEON_FORCE_Z_DIRTY              (1  << 29)
GL_RENDERER = Mesa DRI Radeon 20030328 AGP 4x x86/MMX+/SSE2 TCL
GL_VERSION = 1.2 Mesa 5.0.1
Testing GL_INCR...
OK!
Testing GL_INCR_WRAP_EXT...
Failed GL_INCR_WRAP test on iteration #1 (got 255, expected 1)
Failed GL_INCR_WRAP test on iteration #2 (got 254, expected 2)
Failed GL_INCR_WRAP test on iteration #3 (got 253, expected 3)
Failed GL_INCR_WRAP test on iteration #4 (got 252, expected 4)
Failed GL_INCR_WRAP test on iteration #5 (got 251, expected 5)
Failed GL_INCR_WRAP test on iteration #6 (got 250, expected 6)
Failed GL_INCR_WRAP test on iteration #7 (got 249, expected 7)
Failed GL_INCR_WRAP test on iteration #8 (got 248, expected 8)
Failed GL_INCR_WRAP test on iteration #9 (got 247, expected 9)
Failed GL_INCR_WRAP test on iteration #10 (got 246, expected 10)
Failed GL_INCR_WRAP test on iteration #11 (got 245, expected 11)
Failed GL_INCR_WRAP test on iteration #12 (got 244, expected 12)
Failed GL_INCR_WRAP test on iteration #13 (got 243, expected 13)
Failed GL_INCR_WRAP test on iteration #14 (got 242, expected 14)
Failed GL_INCR_WRAP test on iteration #15 (got 241, expected 15)
Failed GL_INCR_WRAP test on iteration #16 (got 240, expected 16)
Failed GL_INCR_WRAP test on iteration #17 (got 239, expected 17)
Failed GL_INCR_WRAP test on iteration #18 (got 238, expected 18)
Failed GL_INCR_WRAP test on iteration #19 (got 237, expected 19)
Failed GL_INCR_WRAP test on iteration #20 (got 236, expected 20)
Failed GL_INCR_WRAP test on iteration #21 (got 235, expected 21)
Failed GL_INCR_WRAP test on iteration #22 (got 234, expected 22)
Failed GL_INCR_WRAP test on iteration #23 (got 233, expected 23)
Failed GL_INCR_WRAP test on iteration #24 (got 232, expected 24)
Failed GL_INCR_WRAP test on iteration #25 (got 231, expected 25)
Failed GL_INCR_WRAP test on iteration #26 (got 230, expected 26)
Failed GL_INCR_WRAP test on iteration #27 (got 229, expected 27)
Failed GL_INCR_WRAP test on iteration #28 (got 228, expected 28)
Failed GL_INCR_WRAP test on iteration #29 (got 227, expected 29)
Failed GL_INCR_WRAP test on iteration #30 (got 226, expected 30)
Failed GL_INCR_WRAP test on iteration #31 (got 225, expected 31)
Failed GL_INCR_WRAP test on iteration #32 (got 224, expected 32)
Failed GL_INCR_WRAP test on iteration #33 (got 223, expected 33)
Failed GL_INCR_WRAP test on iteration #34 (got 222, expected 34)
Failed GL_INCR_WRAP test on iteration #35 (got 221, expected 35)
Failed GL_INCR_WRAP test on iteration #36 (got 220, expected 36)
Failed GL_INCR_WRAP test on iteration #37 (got 219, expected 37)
Failed GL_INCR_WRAP test on iteration #38 (got 218, expected 38)
Failed GL_INCR_WRAP test on iteration #39 (got 217, expected 39)
Failed GL_INCR_WRAP test on iteration #40 (got 216, expected 40)
Failed GL_INCR_WRAP test on iteration #41 (got 215, expected 41)
Failed GL_INCR_WRAP test on iteration #42 (got 214, expected 42)
Failed GL_INCR_WRAP test on iteration #43 (got 213, expected 43)
Failed GL_INCR_WRAP test on iteration #44 (got 212, expected 44)
Failed GL_INCR_WRAP test on iteration #45 (got 211, expected 45)
Failed GL_INCR_WRAP test on iteration #46 (got 210, expected 46)
Failed GL_INCR_WRAP test on iteration #47 (got 209, expected 47)
Failed GL_INCR_WRAP test on iteration #48 (got 208, expected 48)
Failed GL_INCR_WRAP test on iteration #49 (got 207, expected 49)
Failed GL_INCR_WRAP test on iteration #50 (got 206, expected 50)
Failed GL_INCR_WRAP test on iteration #51 (got 205, expected 51)
Failed GL_INCR_WRAP test on iteration #52 (got 204, expected 52)
Failed GL_INCR_WRAP test on iteration #53 (got 203, expected 53)
Failed GL_INCR_WRAP test on iteration #54 (got 202, expected 54)
Failed GL_INCR_WRAP test on iteration #55 (got 201, expected 55)
Failed GL_INCR_WRAP test on iteration #56 (got 200, expected 56)
Failed GL_INCR_WRAP test on iteration #57 (got 199, expected 57)
Failed GL_INCR_WRAP test on iteration #58 (got 198, expected 58)
Failed GL_INCR_WRAP test on iteration #59 (got 197, expected 59)
Failed GL_INCR_WRAP test on iteration #60 (got 196, expected 60)
Failed GL_INCR_WRAP test on iteration #61 (got 195, expected 61)
Failed GL_INCR_WRAP test on iteration #62 (got 194, expected 62)
Failed GL_INCR_WRAP test on iteration #63 (got 193, expected 63)
Failed GL_INCR_WRAP test on iteration #64 (got 192, expected 64)
Failed GL_INCR_WRAP test on iteration #65 (got 191, expected 65)
Failed GL_INCR_WRAP test on iteration #66 (got 190, expected 66)
Failed GL_INCR_WRAP test on iteration #67 (got 189, expected 67)
Failed GL_INCR_WRAP test on iteration #68 (got 188, expected 68)
Failed GL_INCR_WRAP test on iteration #69 (got 187, expected 69)
Failed GL_INCR_WRAP test on iteration #70 (got 186, expected 70)
Failed GL_INCR_WRAP test on iteration #71 (got 185, expected 71)
Failed GL_INCR_WRAP test on iteration #72 (got 184, expected 72)
Failed GL_INCR_WRAP test on iteration #73 (got 183, expected 73)
Failed GL_INCR_WRAP test on iteration #74 (got 182, expected 74)
Failed GL_INCR_WRAP test on iteration #75 (got 181, expected 75)
Failed GL_INCR_WRAP test on iteration #76 (got 180, expected 76)
Failed GL_INCR_WRAP test on iteration #77 (got 179, expected 77)
Failed GL_INCR_WRAP test on iteration #78 (got 178, expected 78)
Failed GL_INCR_WRAP test on iteration #79 (got 177, expected 79)
Failed GL_INCR_WRAP test on iteration #80 (got 176, expected 80)
Failed GL_INCR_WRAP test on iteration #81 (got 175, expected 81)
Failed GL_INCR_WRAP test on iteration #82 (got 174, expected 82)
Failed GL_INCR_WRAP test on iteration #83 (got 173, expected 83)
Failed GL_INCR_WRAP test on iteration #84 (got 172, expected 84)
Failed GL_INCR_WRAP test on iteration #85 (got 171, expected 85)
Failed GL_INCR_WRAP test on iteration #86 (got 170, expected 86)
Failed GL_INCR_WRAP test on iteration #87 (got 169, expected 87)
Failed GL_INCR_WRAP test on iteration #88 (got 168, expected 88)
Failed GL_INCR_WRAP test on iteration #89 (got 167, expected 89)
Failed GL_INCR_WRAP test on iteration #90 (got 166, expected 90)
Failed GL_INCR_WRAP test on iteration #91 (got 165, expected 91)
Failed GL_INCR_WRAP test on iteration #92 (got 164, expected 92)
Failed GL_INCR_WRAP test on iteration #93 (got 163, expected 93)
Failed GL_INCR_WRAP test on iteration #94 (got 162, expected 94)
Failed GL_INCR_WRAP test on iteration #95 (got 161, expected 95)
Failed GL_INCR_WRAP test on iteration #96 (got 160, expected 96)
Failed GL_INCR_WRAP test on iteration #97 (got 159, expected 97)
Failed GL_INCR_WRAP test on iteration #98 (got 158, expected 98)
Failed GL_INCR_WRAP test on iteration #99 (got 157, expected 99)
Failed GL_INCR_WRAP test on iteration #100 (got 156, expected 100)
Failed GL_INCR_WRAP test on iteration #101 (got 155, expected 101)
Failed GL_INCR_WRAP test on iteration #102 (got 154, expected 102)
Failed GL_INCR_WRAP test on iteration #103 (got 153, expected 103)
Failed GL_INCR_WRAP test on iteration #104 (got 152, expected 104)
Failed GL_INCR_WRAP test on iteration #105 (got 151, expected 105)
Failed GL_INCR_WRAP test on iteration #106 (got 150, expected 106)
Failed GL_INCR_WRAP test on iteration #107 (got 149, expected 107)
Failed GL_INCR_WRAP test on iteration #108 (got 148, expected 108)
Failed GL_INCR_WRAP test on iteration #109 (got 147, expected 109)
Failed GL_INCR_WRAP test on iteration #110 (got 146, expected 110)
Failed GL_INCR_WRAP test on iteration #111 (got 145, expected 111)
Failed GL_INCR_WRAP test on iteration #112 (got 144, expected 112)
Failed GL_INCR_WRAP test on iteration #113 (got 143, expected 113)
Failed GL_INCR_WRAP test on iteration #114 (got 142, expected 114)
Failed GL_INCR_WRAP test on iteration #115 (got 141, expected 115)
Failed GL_INCR_WRAP test on iteration #116 (got 140, expected 116)
Failed GL_INCR_WRAP test on iteration #117 (got 139, expected 117)
Failed GL_INCR_WRAP test on iteration #118 (got 138, expected 118)
Failed GL_INCR_WRAP test on iteration #119 (got 137, expected 119)
Failed GL_INCR_WRAP test on iteration #120 (got 136, expected 120)
Failed GL_INCR_WRAP test on iteration #121 (got 135, expected 121)
Failed GL_INCR_WRAP test on iteration #122 (got 134, expected 122)
Failed GL_INCR_WRAP test on iteration #123 (got 133, expected 123)
Failed GL_INCR_WRAP test on iteration #124 (got 132, expected 124)
Failed GL_INCR_WRAP test on iteration #125 (got 131, expected 125)
Failed GL_INCR_WRAP test on iteration #126 (got 130, expected 126)
Failed GL_INCR_WRAP test on iteration #127 (got 129, expected 127)
Failed GL_INCR_WRAP test on iteration #129 (got 127, expected 129)
Failed GL_INCR_WRAP test on iteration #130 (got 126, expected 130)
Failed GL_INCR_WRAP test on iteration #131 (got 125, expected 131)
Failed GL_INCR_WRAP test on iteration #132 (got 124, expected 132)
Failed GL_INCR_WRAP test on iteration #133 (got 123, expected 133)
Failed GL_INCR_WRAP test on iteration #134 (got 122, expected 134)
Failed GL_INCR_WRAP test on iteration #135 (got 121, expected 135)
Failed GL_INCR_WRAP test on iteration #136 (got 120, expected 136)
Failed GL_INCR_WRAP test on iteration #137 (got 119, expected 137)
Failed GL_INCR_WRAP test on iteration #138 (got 118, expected 138)
Failed GL_INCR_WRAP test on iteration #139 (got 117, expected 139)
Failed GL_INCR_WRAP test on iteration #140 (got 116, expected 140)
Failed GL_INCR_WRAP test on iteration #141 (got 115, expected 141)
Failed GL_INCR_WRAP test on iteration #142 (got 114, expected 142)
Failed GL_INCR_WRAP test on iteration #143 (got 113, expected 143)
Failed GL_INCR_WRAP test on iteration #144 (got 112, expected 144)
Failed GL_INCR_WRAP test on iteration #145 (got 111, expected 145)
Failed GL_INCR_WRAP test on iteration #146 (got 110, expected 146)
Failed GL_INCR_WRAP test on iteration #147 (got 109, expected 147)
Failed GL_INCR_WRAP test on iteration #148 (got 108, expected 148)
Failed GL_INCR_WRAP test on iteration #149 (got 107, expected 149)
Failed GL_INCR_WRAP test on iteration #150 (got 106, expected 150)
Failed GL_INCR_WRAP test on iteration #151 (got 105, expected 151)
Failed GL_INCR_WRAP test on iteration #152 (got 104, expected 152)
Failed GL_INCR_WRAP test on iteration #153 (got 103, expected 153)
Failed GL_INCR_WRAP test on iteration #154 (got 102, expected 154)
Failed GL_INCR_WRAP test on iteration #155 (got 101, expected 155)
Failed GL_INCR_WRAP test on iteration #156 (got 100, expected 156)
Failed GL_INCR_WRAP test on iteration #157 (got 99, expected 157)
Failed GL_INCR_WRAP test on iteration #158 (got 98, expected 158)
Failed GL_INCR_WRAP test on iteration #159 (got 97, expected 159)
Failed GL_INCR_WRAP test on iteration #160 (got 96, expected 160)
Failed GL_INCR_WRAP test on iteration #161 (got 95, expected 161)
Failed GL_INCR_WRAP test on iteration #162 (got 94, expected 162)
Failed GL_INCR_WRAP test on iteration #163 (got 93, expected 163)
Failed GL_INCR_WRAP test on iteration #164 (got 92, expected 164)
Failed GL_INCR_WRAP test on iteration #165 (got 91, expected 165)
Failed GL_INCR_WRAP test on iteration #166 (got 90, expected 166)
Failed GL_INCR_WRAP test on iteration #167 (got 89, expected 167)
Failed GL_INCR_WRAP test on iteration #168 (got 88, expected 168)
Failed GL_INCR_WRAP test on iteration #169 (got 87, expected 169)
Failed GL_INCR_WRAP test on iteration #170 (got 86, expected 170)
Failed GL_INCR_WRAP test on iteration #171 (got 85, expected 171)
Failed GL_INCR_WRAP test on iteration #172 (got 84, expected 172)
Failed GL_INCR_WRAP test on iteration #173 (got 83, expected 173)
Failed GL_INCR_WRAP test on iteration #174 (got 82, expected 174)
Failed GL_INCR_WRAP test on iteration #175 (got 81, expected 175)
Failed GL_INCR_WRAP test on iteration #176 (got 80, expected 176)
Failed GL_INCR_WRAP test on iteration #177 (got 79, expected 177)
Failed GL_INCR_WRAP test on iteration #178 (got 78, expected 178)
Failed GL_INCR_WRAP test on iteration #179 (got 77, expected 179)
Failed GL_INCR_WRAP test on iteration #180 (got 76, expected 180)
Failed GL_INCR_WRAP test on iteration #181 (got 75, expected 181)
Failed GL_INCR_WRAP test on iteration #182 (got 74, expected 182)
Failed GL_INCR_WRAP test on iteration #183 (got 73, expected 183)
Failed GL_INCR_WRAP test on iteration #184 (got 72, expected 184)
Failed GL_INCR_WRAP test on iteration #185 (got 71, expected 185)
Failed GL_INCR_WRAP test on iteration #186 (got 70, expected 186)
Failed GL_INCR_WRAP test on iteration #187 (got 69, expected 187)
Failed GL_INCR_WRAP test on iteration #188 (got 68, expected 188)
Failed GL_INCR_WRAP test on iteration #189 (got 67, expected 189)
Failed GL_INCR_WRAP test on iteration #190 (got 66, expected 190)
Failed GL_INCR_WRAP test on iteration #191 (got 65, expected 191)
Failed GL_INCR_WRAP test on iteration #192 (got 64, expected 192)
Failed GL_INCR_WRAP test on iteration #193 (got 63, expected 193)
Failed GL_INCR_WRAP test on iteration #194 (got 62, expected 194)
Failed GL_INCR_WRAP test on iteration #195 (got 61, expected 195)
Failed GL_INCR_WRAP test on iteration #196 (got 60, expected 196)
Failed GL_INCR_WRAP test on iteration #197 (got 59, expected 197)
Failed GL_INCR_WRAP test on iteration #198 (got 58, expected 198)
Failed GL_INCR_WRAP test on iteration #199 (got 57, expected 199)
Failed GL_INCR_WRAP test on iteration #200 (got 56, expected 200)
Failed GL_INCR_WRAP test on iteration #201 (got 55, expected 201)
Failed GL_INCR_WRAP test on iteration #202 (got 54, expected 202)
Failed GL_INCR_WRAP test on iteration #203 (got 53, expected 203)
Failed GL_INCR_WRAP test on iteration #204 (got 52, expected 204)
Failed GL_INCR_WRAP test on iteration #205 (got 51, expected 205)
Failed GL_INCR_WRAP test on iteration #206 (got 50, expected 206)
Failed GL_INCR_WRAP test on iteration #207 (got 49, expected 207)
Failed GL_INCR_WRAP test on iteration #208 (got 48, expected 208)
Failed GL_INCR_WRAP test on iteration #209 (got 47, expected 209)
Failed GL_INCR_WRAP test on iteration #210 (got 46, expected 210)
Failed GL_INCR_WRAP test on iteration #211 (got 45, expected 211)
Failed GL_INCR_WRAP test on iteration #212 (got 44, expected 212)
Failed GL_INCR_WRAP test on iteration #213 (got 43, expected 213)
Failed GL_INCR_WRAP test on iteration #214 (got 42, expected 214)
Failed GL_INCR_WRAP test on iteration #215 (got 41, expected 215)
Failed GL_INCR_WRAP test on iteration #216 (got 40, expected 216)
Failed GL_INCR_WRAP test on iteration #217 (got 39, expected 217)
Failed GL_INCR_WRAP test on iteration #218 (got 38, expected 218)
Failed GL_INCR_WRAP test on iteration #219 (got 37, expected 219)
Failed GL_INCR_WRAP test on iteration #220 (got 36, expected 220)
Failed GL_INCR_WRAP test on iteration #221 (got 35, expected 221)
Failed GL_INCR_WRAP test on iteration #222 (got 34, expected 222)
Failed GL_INCR_WRAP test on iteration #223 (got 33, expected 223)
Failed GL_INCR_WRAP test on iteration #224 (got 32, expected 224)
Failed GL_INCR_WRAP test on iteration #225 (got 31, expected 225)
Failed GL_INCR_WRAP test on iteration #226 (got 30, expected 226)
Failed GL_INCR_WRAP test on iteration #227 (got 29, expected 227)
Failed GL_INCR_WRAP test on iteration #228 (got 28, expected 228)
Failed GL_INCR_WRAP test on iteration #229 (got 27, expected 229)
Failed GL_INCR_WRAP test on iteration #230 (got 26, expected 230)
Failed GL_INCR_WRAP test on iteration #231 (got 25, expected 231)
Failed GL_INCR_WRAP test on iteration #232 (got 24, expected 232)
Failed GL_INCR_WRAP test on iteration #233 (got 23, expected 233)
Failed GL_INCR_WRAP test on iteration #234 (got 22, expected 234)
Failed GL_INCR_WRAP test on iteration #235 (got 21, expected 235)
Failed GL_INCR_WRAP test on iteration #236 (got 20, expected 236)
Failed GL_INCR_WRAP test on iteration #237 (got 19, expected 237)
Failed GL_INCR_WRAP test on iteration #238 (got 18, expected 238)
Failed GL_INCR_WRAP test on iteration #239 (got 17, expected 239)
Failed GL_INCR_WRAP test on iteration #240 (got 16, expected 240)
Failed GL_INCR_WRAP test on iteration #241 (got 15, expected 241)
Failed GL_INCR_WRAP test on iteration #242 (got 14, expected 242)
Failed GL_INCR_WRAP test on iteration #243 (got 13, expected 243)
Failed GL_INCR_WRAP test on iteration #244 (got 12, expected 244)
Failed GL_INCR_WRAP test on iteration #245 (got 11, expected 245)
Failed GL_INCR_WRAP test on iteration #246 (got 10, expected 246)
Failed GL_INCR_WRAP test on iteration #247 (got 9, expected 247)
Failed GL_INCR_WRAP test on iteration #248 (got 8, expected 248)
Failed GL_INCR_WRAP test on iteration #249 (got 7, expected 249)
Failed GL_INCR_WRAP test on iteration #250 (got 6, expected 250)
Failed GL_INCR_WRAP test on iteration #251 (got 5, expected 251)
Failed GL_INCR_WRAP test on iteration #252 (got 4, expected 252)
Failed GL_INCR_WRAP test on iteration #253 (got 3, expected 253)
Failed GL_INCR_WRAP test on iteration #254 (got 2, expected 254)
Failed GL_INCR_WRAP test on iteration #255 (got 1, expected 255)
Failed GL_INCR_WRAP test on iteration #257 (got 255, expected 1)
Failed GL_INCR_WRAP test on iteration #258 (got 254, expected 2)
Failed GL_INCR_WRAP test on iteration #259 (got 253, expected 3)
Failed GL_INCR_WRAP test on iteration #260 (got 252, expected 4)
Failed GL_INCR_WRAP test on iteration #261 (got 251, expected 5)
Failed GL_INCR_WRAP test on iteration #262 (got 250, expected 6)
Failed GL_INCR_WRAP test on iteration #263 (got 249, expected 7)
Failed GL_INCR_WRAP test on iteration #264 (got 248, expected 8)
Testing GL_DECR...
Failed GL_DECR test on iteration #256 (got 255, expected 0)
Failed GL_DECR test on iteration #257 (got 254, expected 0)
Failed GL_DECR test on iteration #258 (got 253, expected 0)
Failed GL_DECR test on iteration #259 (got 252, expected 0)
Failed GL_DECR test on iteration #260 (got 251, expected 0)
Failed GL_DECR test on iteration #261 (got 250, expected 0)
Failed GL_DECR test on iteration #262 (got 249, expected 0)
Failed GL_DECR test on iteration #263 (got 248, expected 0)
Failed GL_DECR test on iteration #264 (got 247, expected 0)
Testing GL_DECR_WRAP_EXT...
Failed GL_DECR_WRAP test on iteration #1 (got 0, expected 254)
Failed GL_DECR_WRAP test on iteration #2 (got 255, expected 253)
Failed GL_DECR_WRAP test on iteration #3 (got 0, expected 252)
Failed GL_DECR_WRAP test on iteration #4 (got 255, expected 251)
Failed GL_DECR_WRAP test on iteration #5 (got 0, expected 250)
Failed GL_DECR_WRAP test on iteration #6 (got 255, expected 249)
Failed GL_DECR_WRAP test on iteration #7 (got 0, expected 248)
Failed GL_DECR_WRAP test on iteration #8 (got 255, expected 247)
Failed GL_DECR_WRAP test on iteration #9 (got 0, expected 246)
Failed GL_DECR_WRAP test on iteration #10 (got 255, expected 245)
Failed GL_DECR_WRAP test on iteration #11 (got 0, expected 244)
Failed GL_DECR_WRAP test on iteration #12 (got 255, expected 243)
Failed GL_DECR_WRAP test on iteration #13 (got 0, expected 242)
Failed GL_DECR_WRAP test on iteration #14 (got 255, expected 241)
Failed GL_DECR_WRAP test on iteration #15 (got 0, expected 240)
Failed GL_DECR_WRAP test on iteration #16 (got 255, expected 239)
Failed GL_DECR_WRAP test on iteration #17 (got 0, expected 238)
Failed GL_DECR_WRAP test on iteration #18 (got 255, expected 237)
Failed GL_DECR_WRAP test on iteration #19 (got 0, expected 236)
Failed GL_DECR_WRAP test on iteration #20 (got 255, expected 235)
Failed GL_DECR_WRAP test on iteration #21 (got 0, expected 234)
Failed GL_DECR_WRAP test on iteration #22 (got 255, expected 233)
Failed GL_DECR_WRAP test on iteration #23 (got 0, expected 232)
Failed GL_DECR_WRAP test on iteration #24 (got 255, expected 231)
Failed GL_DECR_WRAP test on iteration #25 (got 0, expected 230)
Failed GL_DECR_WRAP test on iteration #26 (got 255, expected 229)
Failed GL_DECR_WRAP test on iteration #27 (got 0, expected 228)
Failed GL_DECR_WRAP test on iteration #28 (got 255, expected 227)
Failed GL_DECR_WRAP test on iteration #29 (got 0, expected 226)
Failed GL_DECR_WRAP test on iteration #30 (got 255, expected 225)
Failed GL_DECR_WRAP test on iteration #31 (got 0, expected 224)
Failed GL_DECR_WRAP test on iteration #32 (got 255, expected 223)
Failed GL_DECR_WRAP test on iteration #33 (got 0, expected 222)
Failed GL_DECR_WRAP test on iteration #34 (got 255, expected 221)
Failed GL_DECR_WRAP test on iteration #35 (got 0, expected 220)
Failed GL_DECR_WRAP test on iteration #36 (got 255, expected 219)
Failed GL_DECR_WRAP test on iteration #37 (got 0, expected 218)
Failed GL_DECR_WRAP test on iteration #38 (got 255, expected 217)
Failed GL_DECR_WRAP test on iteration #39 (got 0, expected 216)
Failed GL_DECR_WRAP test on iteration #40 (got 255, expected 215)
Failed GL_DECR_WRAP test on iteration #41 (got 0, expected 214)
Failed GL_DECR_WRAP test on iteration #42 (got 255, expected 213)
Failed GL_DECR_WRAP test on iteration #43 (got 0, expected 212)
Failed GL_DECR_WRAP test on iteration #44 (got 255, expected 211)
Failed GL_DECR_WRAP test on iteration #45 (got 0, expected 210)
Failed GL_DECR_WRAP test on iteration #46 (got 255, expected 209)
Failed GL_DECR_WRAP test on iteration #47 (got 0, expected 208)
Failed GL_DECR_WRAP test on iteration #48 (got 255, expected 207)
Failed GL_DECR_WRAP test on iteration #49 (got 0, expected 206)
Failed GL_DECR_WRAP test on iteration #50 (got 255, expected 205)
Failed GL_DECR_WRAP test on iteration #51 (got 0, expected 204)
Failed GL_DECR_WRAP test on iteration #52 (got 255, expected 203)
Failed GL_DECR_WRAP test on iteration #53 (got 0, expected 202)
Failed GL_DECR_WRAP test on iteration #54 (got 255, expected 201)
Failed GL_DECR_WRAP test on iteration #55 (got 0, expected 200)
Failed GL_DECR_WRAP test on iteration #56 (got 255, expected 199)
Failed GL_DECR_WRAP test on iteration #57 (got 0, expected 198)
Failed GL_DECR_WRAP test on iteration #58 (got 255, expected 197)
Failed GL_DECR_WRAP test on iteration #59 (got 0, expected 196)
Failed GL_DECR_WRAP test on iteration #60 (got 255, expected 195)
Failed GL_DECR_WRAP test on iteration #61 (got 0, expected 194)
Failed GL_DECR_WRAP test on iteration #62 (got 255, expected 193)
Failed GL_DECR_WRAP test on iteration #63 (got 0, expected 192)
Failed GL_DECR_WRAP test on iteration #64 (got 255, expected 191)
Failed GL_DECR_WRAP test on iteration #65 (got 0, expected 190)
Failed GL_DECR_WRAP test on iteration #66 (got 255, expected 189)
Failed GL_DECR_WRAP test on iteration #67 (got 0, expected 188)
Failed GL_DECR_WRAP test on iteration #68 (got 255, expected 187)
Failed GL_DECR_WRAP test on iteration #69 (got 0, expected 186)
Failed GL_DECR_WRAP test on iteration #70 (got 255, expected 185)
Failed GL_DECR_WRAP test on iteration #71 (got 0, expected 184)
Failed GL_DECR_WRAP test on iteration #72 (got 255, expected 183)
Failed GL_DECR_WRAP test on iteration #73 (got 0, expected 182)
Failed GL_DECR_WRAP test on iteration #74 (got 255, expected 181)
Failed GL_DECR_WRAP test on iteration #75 (got 0, expected 180)
Failed GL_DECR_WRAP test on iteration #76 (got 255, expected 179)
Failed GL_DECR_WRAP test on iteration #77 (got 0, expected 178)
Failed GL_DECR_WRAP test on iteration #78 (got 255, expected 177)
Failed GL_DECR_WRAP test on iteration #79 (got 0, expected 176)
Failed GL_DECR_WRAP test on iteration #80 (got 255, expected 175)
Failed GL_DECR_WRAP test on iteration #81 (got 0, expected 174)
Failed GL_DECR_WRAP test on iteration #82 (got 255, expected 173)
Failed GL_DECR_WRAP test on iteration #83 (got 0, expected 172)
Failed GL_DECR_WRAP test on iteration #84 (got 255, expected 171)
Failed GL_DECR_WRAP test on iteration #85 (got 0, expected 170)
Failed GL_DECR_WRAP test on iteration #86 (got 255, expected 169)
Failed GL_DECR_WRAP test on iteration #87 (got 0, expected 168)
Failed GL_DECR_WRAP test on iteration #88 (got 255, expected 167)
Failed GL_DECR_WRAP test on iteration #89 (got 0, expected 166)
Failed GL_DECR_WRAP test on iteration #90 (got 255, expected 165)
Failed GL_DECR_WRAP test on iteration #91 (got 0, expected 164)
Failed GL_DECR_WRAP test on iteration #92 (got 255, expected 163)
Failed GL_DECR_WRAP test on iteration #93 (got 0, expected 162)
Failed GL_DECR_WRAP test on iteration #94 (got 255, expected 161)
Failed GL_DECR_WRAP test on iteration #95 (got 0, expected 160)
Failed GL_DECR_WRAP test on iteration #96 (got 255, expected 159)
Failed GL_DECR_WRAP test on iteration #97 (got 0, expected 158)
Failed GL_DECR_WRAP test on iteration #98 (got 255, expected 157)
Failed GL_DECR_WRAP test on iteration #99 (got 0, expected 156)
Failed GL_DECR_WRAP test on iteration #100 (got 255, expected 155)
Failed GL_DECR_WRAP test on iteration #101 (got 0, expected 154)
Failed GL_DECR_WRAP test on iteration #102 (got 255, expected 153)
Failed GL_DECR_WRAP test on iteration #103 (got 0, expected 152)
Failed GL_DECR_WRAP test on iteration #104 (got 255, expected 151)
Failed GL_DECR_WRAP test on iteration #105 (got 0, expected 150)
Failed GL_DECR_WRAP test on iteration #106 (got 255, expected 149)
Failed GL_DECR_WRAP test on iteration #107 (got 0, expected 148)
Failed GL_DECR_WRAP test on iteration #108 (got 255, expected 147)
Failed GL_DECR_WRAP test on iteration #109 (got 0, expected 146)
Failed GL_DECR_WRAP test on iteration #110 (got 255, expected 145)
Failed GL_DECR_WRAP test on iteration #111 (got 0, expected 144)
Failed GL_DECR_WRAP test on iteration #112 (got 255, expected 143)
Failed GL_DECR_WRAP test on iteration #113 (got 0, expected 142)
Failed GL_DECR_WRAP test on iteration #114 (got 255, expected 141)
Failed GL_DECR_WRAP test on iteration #115 (got 0, expected 140)
Failed GL_DECR_WRAP test on iteration #116 (got 255, expected 139)
Failed GL_DECR_WRAP test on iteration #117 (got 0, expected 138)
Failed GL_DECR_WRAP test on iteration #118 (got 255, expected 137)
Failed GL_DECR_WRAP test on iteration #119 (got 0, expected 136)
Failed GL_DECR_WRAP test on iteration #120 (got 255, expected 135)
Failed GL_DECR_WRAP test on iteration #121 (got 0, expected 134)
Failed GL_DECR_WRAP test on iteration #122 (got 255, expected 133)
Failed GL_DECR_WRAP test on iteration #123 (got 0, expected 132)
Failed GL_DECR_WRAP test on iteration #124 (got 255, expected 131)
Failed GL_DECR_WRAP test on iteration #125 (got 0, expected 130)
Failed GL_DECR_WRAP test on iteration #126 (got 255, expected 129)
Failed GL_DECR_WRAP test on iteration #127 (got 0, expected 128)
Failed GL_DECR_WRAP test on iteration #128 (got 255, expected 127)
Failed GL_DECR_WRAP test on iteration #129 (got 0, expected 126)
Failed GL_DECR_WRAP test on iteration #130 (got 255, expected 125)
Failed GL_DECR_WRAP test on iteration #131 (got 0, expected 124)
Failed GL_DECR_WRAP test on iteration #132 (got 255, expected 123)
Failed GL_DECR_WRAP test on iteration #133 (got 0, expected 122)
Failed GL_DECR_WRAP test on iteration #134 (got 255, expected 121)
Failed GL_DECR_WRAP test on iteration #135 (got 0, expected 120)
Failed GL_DECR_WRAP test on iteration #136 (got 255, expected 119)
Failed GL_DECR_WRAP test on iteration #137 (got 0, expected 118)
Failed GL_DECR_WRAP test on iteration #138 (got 255, expected 117)
Failed GL_DECR_WRAP test on iteration #139 (got 0, expected 116)
Failed GL_DECR_WRAP test on iteration #140 (got 255, expected 115)
Failed GL_DECR_WRAP test on iteration #141 (got 0, expected 114)
Failed GL_DECR_WRAP test on iteration #142 (got 255, expected 113)
Failed GL_DECR_WRAP test on iteration #143 (got 0, expected 112)
Failed GL_DECR_WRAP test on iteration #144 (got 255, expected 111)
Failed GL_DECR_WRAP test on iteration #145 (got 0, expected 110)
Failed GL_DECR_WRAP test on iteration #146 (got 255, expected 109)
Failed GL_DECR_WRAP test on iteration #147 (got 0, expected 108)
Failed GL_DECR_WRAP test on iteration #148 (got 255, expected 107)
Failed GL_DECR_WRAP test on iteration #149 (got 0, expected 106)
Failed GL_DECR_WRAP test on iteration #150 (got 255, expected 105)
Failed GL_DECR_WRAP test on iteration #151 (got 0, expected 104)
Failed GL_DECR_WRAP test on iteration #152 (got 255, expected 103)
Failed GL_DECR_WRAP test on iteration #153 (got 0, expected 102)
Failed GL_DECR_WRAP test on iteration #154 (got 255, expected 101)
Failed GL_DECR_WRAP test on iteration #155 (got 0, expected 100)
Failed GL_DECR_WRAP test on iteration #156 (got 255, expected 99)
Failed GL_DECR_WRAP test on iteration #157 (got 0, expected 98)
Failed GL_DECR_WRAP test on iteration #158 (got 255, expected 97)
Failed GL_DECR_WRAP test on iteration #159 (got 0, expected 96)
Failed GL_DECR_WRAP test on iteration #160 (got 255, expected 95)
Failed GL_DECR_WRAP test on iteration #161 (got 0, expected 94)
Failed GL_DECR_WRAP test on iteration #162 (got 255, expected 93)
Failed GL_DECR_WRAP test on iteration #163 (got 0, expected 92)
Failed GL_DECR_WRAP test on iteration #164 (got 255, expected 91)
Failed GL_DECR_WRAP test on iteration #165 (got 0, expected 90)
Failed GL_DECR_WRAP test on iteration #166 (got 255, expected 89)
Failed GL_DECR_WRAP test on iteration #167 (got 0, expected 88)
Failed GL_DECR_WRAP test on iteration #168 (got 255, expected 87)
Failed GL_DECR_WRAP test on iteration #169 (got 0, expected 86)
Failed GL_DECR_WRAP test on iteration #170 (got 255, expected 85)
Failed GL_DECR_WRAP test on iteration #171 (got 0, expected 84)
Failed GL_DECR_WRAP test on iteration #172 (got 255, expected 83)
Failed GL_DECR_WRAP test on iteration #173 (got 0, expected 82)
Failed GL_DECR_WRAP test on iteration #174 (got 255, expected 81)
Failed GL_DECR_WRAP test on iteration #175 (got 0, expected 80)
Failed GL_DECR_WRAP test on iteration #176 (got 255, expected 79)
Failed GL_DECR_WRAP test on iteration #177 (got 0, expected 78)
Failed GL_DECR_WRAP test on iteration #178 (got 255, expected 77)
Failed GL_DECR_WRAP test on iteration #179 (got 0, expected 76)
Failed GL_DECR_WRAP test on iteration #180 (got 255, expected 75)
Failed GL_DECR_WRAP test on iteration #181 (got 0, expected 74)
Failed GL_DECR_WRAP test on iteration #182 (got 255, expected 73)
Failed GL_DECR_WRAP test on iteration #183 (got 0, expected 72)
Failed GL_DECR_WRAP test on iteration #184 (got 255, expected 71)
Failed GL_DECR_WRAP test on iteration #185 (got 0, expected 70)
Failed GL_DECR_WRAP test on iteration #186 (got 255, expected 69)
Failed GL_DECR_WRAP test on iteration #187 (got 0, expected 68)
Failed GL_DECR_WRAP test on iteration #188 (got 255, expected 67)
Failed GL_DECR_WRAP test on iteration #189 (got 0, expected 66)
Failed GL_DECR_WRAP test on iteration #190 (got 255, expected 65)
Failed GL_DECR_WRAP test on iteration #191 (got 0, expected 64)
Failed GL_DECR_WRAP test on iteration #192 (got 255, expected 63)
Failed GL_DECR_WRAP test on iteration #193 (got 0, expected 62)
Failed GL_DECR_WRAP test on iteration #194 (got 255, expected 61)
Failed GL_DECR_WRAP test on iteration #195 (got 0, expected 60)
Failed GL_DECR_WRAP test on iteration #196 (got 255, expected 59)
Failed GL_DECR_WRAP test on iteration #197 (got 0, expected 58)
Failed GL_DECR_WRAP test on iteration #198 (got 255, expected 57)
Failed GL_DECR_WRAP test on iteration #199 (got 0, expected 56)
Failed GL_DECR_WRAP test on iteration #200 (got 255, expected 55)
Failed GL_DECR_WRAP test on iteration #201 (got 0, expected 54)
Failed GL_DECR_WRAP test on iteration #202 (got 255, expected 53)
Failed GL_DECR_WRAP test on iteration #203 (got 0, expected 52)
Failed GL_DECR_WRAP test on iteration #204 (got 255, expected 51)
Failed GL_DECR_WRAP test on iteration #205 (got 0, expected 50)
Failed GL_DECR_WRAP test on iteration #206 (got 255, expected 49)
Failed GL_DECR_WRAP test on iteration #207 (got 0, expected 48)
Failed GL_DECR_WRAP test on iteration #208 (got 255, expected 47)
Failed GL_DECR_WRAP test on iteration #209 (got 0, expected 46)
Failed GL_DECR_WRAP test on iteration #210 (got 255, expected 45)
Failed GL_DECR_WRAP test on iteration #211 (got 0, expected 44)
Failed GL_DECR_WRAP test on iteration #212 (got 255, expected 43)
Failed GL_DECR_WRAP test on iteration #213 (got 0, expected 42)
Failed GL_DECR_WRAP test on iteration #214 (got 255, expected 41)
Failed GL_DECR_WRAP test on iteration #215 (got 0, expected 40)
Failed GL_DECR_WRAP test on iteration #216 (got 255, expected 39)
Failed GL_DECR_WRAP test on iteration #217 (got 0, expected 38)
Failed GL_DECR_WRAP test on iteration #218 (got 255, expected 37)
Failed GL_DECR_WRAP test on iteration #219 (got 0, expected 36)
Failed GL_DECR_WRAP test on iteration #220 (got 255, expected 35)
Failed GL_DECR_WRAP test on iteration #221 (got 0, expected 34)
Failed GL_DECR_WRAP test on iteration #222 (got 255, expected 33)
Failed GL_DECR_WRAP test on iteration #223 (got 0, expected 32)
Failed GL_DECR_WRAP test on iteration #224 (got 255, expected 31)
Failed GL_DECR_WRAP test on iteration #225 (got 0, expected 30)
Failed GL_DECR_WRAP test on iteration #226 (got 255, expected 29)
Failed GL_DECR_WRAP test on iteration #227 (got 0, expected 28)
Failed GL_DECR_WRAP test on iteration #228 (got 255, expected 27)
Failed GL_DECR_WRAP test on iteration #229 (got 0, expected 26)
Failed GL_DECR_WRAP test on iteration #230 (got 255, expected 25)
Failed GL_DECR_WRAP test on iteration #231 (got 0, expected 24)
Failed GL_DECR_WRAP test on iteration #232 (got 255, expected 23)
Failed GL_DECR_WRAP test on iteration #233 (got 0, expected 22)
Failed GL_DECR_WRAP test on iteration #234 (got 255, expected 21)
Failed GL_DECR_WRAP test on iteration #235 (got 0, expected 20)
Failed GL_DECR_WRAP test on iteration #236 (got 255, expected 19)
Failed GL_DECR_WRAP test on iteration #237 (got 0, expected 18)
Failed GL_DECR_WRAP test on iteration #238 (got 255, expected 17)
Failed GL_DECR_WRAP test on iteration #239 (got 0, expected 16)
Failed GL_DECR_WRAP test on iteration #240 (got 255, expected 15)
Failed GL_DECR_WRAP test on iteration #241 (got 0, expected 14)
Failed GL_DECR_WRAP test on iteration #242 (got 255, expected 13)
Failed GL_DECR_WRAP test on iteration #243 (got 0, expected 12)
Failed GL_DECR_WRAP test on iteration #244 (got 255, expected 11)
Failed GL_DECR_WRAP test on iteration #245 (got 0, expected 10)
Failed GL_DECR_WRAP test on iteration #246 (got 255, expected 9)
Failed GL_DECR_WRAP test on iteration #247 (got 0, expected 8)
Failed GL_DECR_WRAP test on iteration #248 (got 255, expected 7)
Failed GL_DECR_WRAP test on iteration #249 (got 0, expected 6)
Failed GL_DECR_WRAP test on iteration #250 (got 255, expected 5)
Failed GL_DECR_WRAP test on iteration #251 (got 0, expected 4)
Failed GL_DECR_WRAP test on iteration #252 (got 255, expected 3)
Failed GL_DECR_WRAP test on iteration #253 (got 0, expected 2)
Failed GL_DECR_WRAP test on iteration #254 (got 255, expected 1)
Failed GL_DECR_WRAP test on iteration #257 (got 0, expected 254)
Failed GL_DECR_WRAP test on iteration #258 (got 255, expected 253)
Failed GL_DECR_WRAP test on iteration #259 (got 0, expected 252)
Failed GL_DECR_WRAP test on iteration #260 (got 255, expected 251)
Failed GL_DECR_WRAP test on iteration #261 (got 0, expected 250)
Failed GL_DECR_WRAP test on iteration #262 (got 255, expected 249)
Failed GL_DECR_WRAP test on iteration #263 (got 0, expected 248)
Failed GL_DECR_WRAP test on iteration #264 (got 255, expected 247)
/* Test GL_EXT_stencil_wrap extension.
 * This is by no means complete, just a quick check.
 *
 * Brian Paul  30 October 2002
 */

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>


static void RunTest(void)
{
   const GLenum prim = GL_LINES;
   GLubyte val;
   int bits, max, i;
   GLboolean failed;

   glGetIntegerv(GL_STENCIL_BITS, &bits);
   max = (1 << bits) - 1;

   glClearStencil(0);
   glEnable(GL_STENCIL_TEST);
   glStencilFunc(GL_ALWAYS, 0, ~0);

   /* test GL_INCR (saturation) */
   glClear(GL_STENCIL_BUFFER_BIT);
   glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
   failed = GL_FALSE;
   printf("Testing GL_INCR...\n");
   for (i = 1; i < max+10; i++) {
      int expected = (i > max) ? max : i;
      glBegin(prim);
      glVertex2f(0.5, 0.5);      glVertex2f(9.5, 0.5);
      glEnd();

      glReadPixels(0, 0, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, &val);
      if (val != expected) {
         printf( "Failed GL_INCR test on iteration #%u "
                 "(got %u, expected %u)\n", i, val, expected );
         failed = GL_TRUE;
      }    
   }

   if ( !failed ) printf("OK!\n");


   /* test GL_INCR_WRAP_EXT (wrap around) */
   glClear(GL_STENCIL_BUFFER_BIT);
   glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP_EXT);
   failed = GL_FALSE;
   printf("Testing GL_INCR_WRAP_EXT...\n");
   for (i = 1; i < max+10; i++) {
      int expected = i % (max + 1);
      glBegin(prim);
      glVertex2f(0.5, 0.5);      glVertex2f(9.5, 0.5);
      glEnd();
      glReadPixels(0, 0, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, &val);
      if (val != expected) {
         printf( "Failed GL_INCR_WRAP test on iteration #%u "
                 "(got %u, expected %u)\n", i, val, expected );
         failed = GL_TRUE;
      }    
   }
   if ( !failed ) printf("OK!\n");

   glClearStencil(max);

   /* test GL_INCR (saturation) */
   glClear(GL_STENCIL_BUFFER_BIT);
   glStencilOp(GL_KEEP, GL_KEEP, GL_DECR);
   failed = GL_FALSE;
   printf("Testing GL_DECR...\n");
   for (i = max-1; i > -10; i--) {
      int expected = (i < 0) ? 0 : i;
      glBegin(prim);
      glVertex2f(0.5, 0.5);      glVertex2f(9.5, 0.5);
      glEnd();
      glReadPixels(0, 0, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, &val);
      if (val != expected) {
         printf( "Failed GL_DECR test on iteration #%u "
                 "(got %u, expected %u)\n", max - i, val, expected );
         failed = GL_TRUE;
      }    
   }
   if ( !failed ) printf("OK!\n");

   /* test GL_INCR_WRAP_EXT (wrap-around) */
   glClear(GL_STENCIL_BUFFER_BIT);
   glStencilOp(GL_KEEP, GL_KEEP, GL_DECR_WRAP_EXT);
   failed = GL_FALSE;
   printf("Testing GL_DECR_WRAP_EXT...\n");
   for (i = max-1; i > -10; i--) {
      int expected = (i < 0) ? max + i + 1: i;
      glBegin(prim);
      glVertex2f(0.5, 0.5);      glVertex2f(9.5, 0.5);
      glEnd();
      glReadPixels(0, 0, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, &val);
      if (val != expected) {
         printf( "Failed GL_DECR_WRAP test on iteration #%u "
                 "(got %u, expected %u)\n", max - i, val, expected );
         failed = GL_TRUE;
      }    
   }
   if ( !failed ) printf("OK!\n");

   glDisable(GL_STENCIL_TEST);
}


static void Display( void )
{
   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

   RunTest();

   glutSwapBuffers();
}


static void Reshape( int width, int height )
{
   glViewport( 0, 0, width, height );
   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();
   glOrtho(0, width, 0, height, -1, 1);
   glMatrixMode( GL_MODELVIEW );
   glLoadIdentity();
}


static void Key( unsigned char key, int x, int y )
{
   (void) x;
   (void) y;
   switch (key) {
      case 27:
         exit(0);
         break;
   }
   glutPostRedisplay();
}


static void Init( void )
{
   const char * ver_str;
   float        version;

   printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
   printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));


   /* Check for both the extension string and GL version 1.4 on the
    * outside chance that some silly vendor exports version 1.4 but doesn't
    * export the extension string.  The stencil-wrap modes are a required
    * part of GL 1.4.
    */

   ver_str = glGetString( GL_VERSION );
   version = (ver_str == NULL) ? 1.0 : strtof( ver_str, NULL );

   if ( !glutExtensionSupported("GL_EXT_stencil_wrap")
        && (version < 1.4) ) {
      printf("Sorry, GL_EXT_stencil_wrap not supported.\n");
      exit(1);
   }
}


int main( int argc, char *argv[] )
{
   glutInit( &argc, argv );
   glutInitWindowPosition( 0, 0 );
   glutInitWindowSize( 400, 400 );
   glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_STENCIL );
   glutCreateWindow(argv[0]);
   glutReshapeFunc( Reshape );
   glutKeyboardFunc( Key );
   glutDisplayFunc( Display );
   Init();
   glutMainLoop();
   return 0;
}

Reply via email to