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.
This commit is contained in:
Eric Anholt 2005-10-24 06:40:56 +00:00
parent 3265585b15
commit dc793d4e9a
4 changed files with 32 additions and 7 deletions

View 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 }
};

View 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.
*/

View 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)

View 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)