{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
{ "GL_EXT_texture_edge_clamp", NULL },
{ "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
+ { "GL_EXT_stencil_wrap", NULL },
{ "GL_MESA_ycbcr_texture", NULL },
{ "GL_NV_blend_square", NULL },
{ "GL_SGIS_generate_mipmap", NULL },
{
r128ContextPtr rmesa = R128_CONTEXT(ctx);
GLuint z = rmesa->setup.z_sten_cntl_c;
- GLboolean ok = 1;
if (!( ctx->Visual.stencilBits > 0 && ctx->Visual.depthBits == 24 ))
return;
break;
case GL_ZERO:
z |= R128_STENCIL_S_FAIL_ZERO;
- ok = 0; /* Hardware bug? ZERO maps to KEEP */
break;
case GL_REPLACE:
z |= R128_STENCIL_S_FAIL_REPLACE;
- ok = 0; /* Hardware bug? REPLACE maps to KEEP */
break;
case GL_INCR:
z |= R128_STENCIL_S_FAIL_INC;
break;
case GL_INVERT:
z |= R128_STENCIL_S_FAIL_INV;
- ok = 0; /* Hardware bug? INV maps to ZERO */
+ break;
+ case GL_INCR_WRAP:
+ z |= R128_STENCIL_S_FAIL_INC_WRAP;
+ break;
+ case GL_DECR_WRAP:
+ z |= R128_STENCIL_S_FAIL_DEC_WRAP;
break;
}
switch ( ctx->Stencil.ZFailFunc[0] ) {
case GL_KEEP:
z |= R128_STENCIL_ZFAIL_KEEP;
- ok = 0; /* Hardware bug? KEEP maps to ZERO */
break;
case GL_ZERO:
z |= R128_STENCIL_ZFAIL_ZERO;
break;
case GL_INVERT:
z |= R128_STENCIL_ZFAIL_INV;
- ok = 0; /* Hardware bug? INV maps to ZERO */
+ break;
+ case GL_INCR_WRAP:
+ z |= R128_STENCIL_ZFAIL_INC_WRAP;
+ break;
+ case GL_DECR_WRAP:
+ z |= R128_STENCIL_ZFAIL_DEC_WRAP;
break;
}
switch ( ctx->Stencil.ZPassFunc[0] ) {
case GL_KEEP:
z |= R128_STENCIL_ZPASS_KEEP;
- ok = 0; /* Hardware bug? KEEP maps to ZERO */
break;
case GL_ZERO:
z |= R128_STENCIL_ZPASS_ZERO;
break;
case GL_DECR:
z |= R128_STENCIL_ZPASS_DEC;
- ok = 0; /* Hardware bug? DEC maps to INCR_WRAP */
break;
case GL_INVERT:
z |= R128_STENCIL_ZPASS_INV;
- ok = 0; /* Hardware bug? INV maps to ZERO */
+ break;
+ case GL_INCR_WRAP:
+ z |= R128_STENCIL_ZPASS_INC_WRAP;
+ break;
+ case GL_DECR_WRAP:
+ z |= R128_STENCIL_ZPASS_DEC_WRAP;
break;
}
- /* XXX: Now that we know whether we can do the given funcs successfully
- * (according to testing done with a modified stencilwrap test), go
- * ahead and drop that knowledge on the floor. While fallbacks remain
- * broken, they make the situation even worse (in test apps, at least) than
- * failing in just the stencil part.
- */
- /*FALLBACK( rmesa, R128_FALLBACK_STENCIL, !ok );*/
-
if ( rmesa->setup.z_sten_cntl_c != z ) {
rmesa->setup.z_sten_cntl_c = z;
rmesa->dirty |= R128_UPLOAD_CONTEXT;
# define R128_STENCIL_S_FAIL_INC (3 << 16)
# define R128_STENCIL_S_FAIL_DEC (4 << 16)
# define R128_STENCIL_S_FAIL_INV (5 << 16)
+# define R128_STENCIL_S_FAIL_INC_WRAP (6 << 16) /* GUESS */
+# define R128_STENCIL_S_FAIL_DEC_WRAP (7 << 16) /* GUESS */
# define R128_STENCIL_S_FAIL_MASK (7 << 16)
# define R128_STENCIL_ZPASS_KEEP (0 << 20)
# define R128_STENCIL_ZPASS_ZERO (1 << 20)
# define R128_STENCIL_ZPASS_INC (3 << 20)
# define R128_STENCIL_ZPASS_DEC (4 << 20)
# define R128_STENCIL_ZPASS_INV (5 << 20)
+# define R128_STENCIL_ZPASS_INC_WRAP (6 << 20) /* GUESS */
+# define R128_STENCIL_ZPASS_DEC_WRAP (7 << 20) /* GUESS */
# define R128_STENCIL_ZPASS_MASK (7 << 20)
# define R128_STENCIL_ZFAIL_KEEP (0 << 24)
# define R128_STENCIL_ZFAIL_ZERO (1 << 24)
# define R128_STENCIL_ZFAIL_INC (3 << 24)
# define R128_STENCIL_ZFAIL_DEC (4 << 24)
# define R128_STENCIL_ZFAIL_INV (5 << 24)
+# define R128_STENCIL_ZFAIL_INC_WRAP (6 << 24) /* GUESS */
+# define R128_STENCIL_ZFAIL_DEC_WRAP (7 << 24) /* GUESS */
# define R128_STENCIL_ZFAIL_MASK (7 << 24)
#define R128_TEX_CNTL_C 0x1c9c
# define R128_Z_ENABLE (1 << 0)