Implement GL_ARB_texture_env_combine, GL_EXT_texture_env_combine, and

GL_ARB_texture_env_crossbar for i810.  This passes both demos/texenv and all
of glean's texCombine tests.
This commit is contained in:
Ian Romanick 2005-08-29 15:43:02 +00:00
parent d9089ab96e
commit f0d0e50994
4 changed files with 617 additions and 672 deletions

View File

@ -254,30 +254,30 @@
/* GFXRENDERSTATE_MAP_ALPHA_BLEND_STAGES, p132
*/
#define GFX_OP_MAP_ALPHA_STAGES ((0x3<<29)|(0x1<<24))
#define MA_STAGE_SHIFT 20
#define MA_STAGE_0 (0<<20)
#define MA_STAGE_1 (1<<20)
#define MA_STAGE_2 (2<<20)
#define MA_UPDATE_ARG1 (1<<18)
#define MA_ARG1_MASK ((0x7<<15)|(0x1<<13))
#define MA_ARG1_ALPHA_FACTOR (0x1<<15)
#define MA_ARG1_ITERATED_ALPHA (0x3<<15)
#define MA_ARG1_CURRENT_ALPHA (0x5<<15)
#define MA_ARG1_TEX0_ALPHA (0x6<<15)
#define MA_ARG1_TEX1_ALPHA (0x7<<15)
#define MA_ARG1_INVERT (0x1<<13)
#define MA_ARG1_DONT_INVERT (0x0<<13)
#define MA_UPDATE_ARG2 (1<<12)
#define MA_ARG2_MASK ((0x7<<8)|(0x1<<6))
#define MA_ARG2_ALPHA_FACTOR (0x1<<8)
#define MA_ARG2_ITERATED_ALPHA (0x3<<8)
#define MA_ARG2_CURRENT_ALPHA (0x5<<8)
#define MA_ARG2_TEX0_ALPHA (0x6<<8)
#define MA_ARG2_TEX1_ALPHA (0x7<<8)
#define MA_ARG2_INVERT (0x1<<6)
#define MA_ARG2_DONT_INVERT (0x0<<6)
#define MA_UPDATE_OP (1<<5)
#define GFX_OP_MAP_ALPHA_STAGES ((0x3<<29)|(0x1<<24))
#define MA_STAGE_SHIFT 20
#define MA_STAGE_0 (0<<20)
#define MA_STAGE_1 (1<<20)
#define MA_STAGE_2 (2<<20)
#define MA_ARG_ONE (0x0<<2)
#define MA_ARG_ALPHA_FACTOR (0x1<<2)
#define MA_ARG_ITERATED_ALPHA (0x3<<2)
#define MA_ARG_CURRENT_ALPHA (0x5<<2)
#define MA_ARG_TEX0_ALPHA (0x6<<2)
#define MA_ARG_TEX1_ALPHA (0x7<<2)
#define MA_ARG_INVERT (0x1)
#define MA_ARG_DONT_INVERT (0x0)
#define MA_UPDATE_ARG1 (1<<18)
#define MA_ARG1_SHIFT 13
#define MA_ARG1_MASK (0x1d << MA_ARG1_SHIFT)
#define MA_UPDATE_ARG2 (1<<12)
#define MA_ARG2_SHIFT 6
#define MA_ARG2_MASK (0x1d << MA_ARG2_SHIFT)
#define MA_UPDATE_OP (1<<5)
#define MA_OP_MASK (0xf)
#define MA_OP_ARG1 (0x1)
#define MA_OP_ARG2 (0x2)
@ -290,64 +290,59 @@
#define MA_OP_LIN_BLEND_ALPHA_FACTOR (0xa)
#define MA_OP_LIN_BLEND_TEX0_ALPHA (0x10)
#define MA_OP_LIN_BLEND_TEX1_ALPHA (0x11)
#define MA_OP_SUBTRACT (0x14)
/* GFXRENDERSTATE_MAP_COLOR_BLEND_STAGES, p129
*/
#define GFX_OP_MAP_COLOR_STAGES ((0x3<<29)|(0x0<<24))
#define MC_STAGE_SHIFT 20
#define MC_STAGE_0 (0<<20)
#define MC_STAGE_1 (1<<20)
#define MC_STAGE_2 (2<<20)
#define MC_UPDATE_DEST (1<<19)
#define MC_DEST_MASK (1<<18)
#define MC_DEST_CURRENT (0<<18)
#define MC_DEST_ACCUMULATOR (1<<18)
#define MC_UPDATE_ARG1 (1<<17)
#define MC_ARG1_MASK ((0x7<<14)|(0x1<<13)|(0x1<<12))
#define MC_ARG1_ONE (0x0<<14)
#define MC_ARG1_COLOR_FACTOR (0x1<<14)
#define MC_ARG1_ACCUMULATOR (0x2<<14)
#define MC_ARG1_ITERATED_COLOR (0x3<<14)
#define MC_ARG1_SPECULAR_COLOR (0x4<<14)
#define MC_ARG1_CURRENT_COLOR (0x5<<14)
#define MC_ARG1_TEX0_COLOR (0x6<<14)
#define MC_ARG1_TEX1_COLOR (0x7<<14)
#define MC_ARG1_DONT_REPLICATE_ALPHA (0x0<<13)
#define MC_ARG1_REPLICATE_ALPHA (0x1<<13)
#define MC_ARG1_DONT_INVERT (0x0<<12)
#define MC_ARG1_INVERT (0x1<<12)
#define MC_UPDATE_ARG2 (1<<11)
#define MC_ARG2_MASK ((0x7<<8)|(0x1<<7)|(0x1<<6))
#define MC_ARG2_ONE (0x0<<8)
#define MC_ARG2_COLOR_FACTOR (0x1<<8)
#define MC_ARG2_ACCUMULATOR (0x2<<8)
#define MC_ARG2_ITERATED_COLOR (0x3<<8)
#define MC_ARG2_SPECULAR_COLOR (0x4<<8)
#define MC_ARG2_CURRENT_COLOR (0x5<<8)
#define MC_ARG2_TEX0_COLOR (0x6<<8)
#define MC_ARG2_TEX1_COLOR (0x7<<8)
#define MC_ARG2_DONT_REPLICATE_ALPHA (0x0<<7)
#define MC_ARG2_REPLICATE_ALPHA (0x1<<7)
#define MC_ARG2_DONT_INVERT (0x0<<6)
#define MC_ARG2_INVERT (0x1<<6)
#define MC_UPDATE_OP (1<<5)
#define MC_OP_MASK (0xf)
#define MC_OP_DISABLE (0x0)
#define MC_OP_ARG1 (0x1)
#define MC_OP_ARG2 (0x2)
#define MC_OP_MODULATE (0x3)
#define MC_OP_MODULATE_X2 (0x4)
#define MC_OP_MODULATE_X4 (0x5)
#define MC_OP_ADD (0x6)
#define MC_OP_ADD_SIGNED (0x7)
#define MC_OP_LIN_BLEND_ITER_ALPHA (0x8)
#define MC_OP_LIN_BLEND_ALPHA_FACTOR (0xa)
#define MC_OP_LIN_BLEND_TEX0_ALPHA (0x10)
#define MC_OP_LIN_BLEND_TEX1_ALPHA (0x11)
#define MC_OP_LIN_BLEND_TEX0_COLOR (0x12)
#define MC_OP_LIN_BLEND_TEX1_COLOR (0x13)
#define MC_OP_SUBTRACT (0x14)
#define GFX_OP_MAP_COLOR_STAGES ((0x3<<29)|(0x0<<24))
#define MC_STAGE_SHIFT 20
#define MC_STAGE_0 (0<<20)
#define MC_STAGE_1 (1<<20)
#define MC_STAGE_2 (2<<20)
#define MC_UPDATE_DEST (1<<19)
#define MC_DEST_MASK (1<<18)
#define MC_DEST_CURRENT (0<<18)
#define MC_DEST_ACCUMULATOR (1<<18)
#define MC_ARG_ONE (0x0<<2)
#define MC_ARG_COLOR_FACTOR (0x1<<2)
#define MC_ARG_ACCUMULATOR (0x2<<2)
#define MC_ARG_ITERATED_COLOR (0x3<<2)
#define MC_ARG_SPECULAR_COLOR (0x4<<2)
#define MC_ARG_CURRENT_COLOR (0x5<<2)
#define MC_ARG_TEX0_COLOR (0x6<<2)
#define MC_ARG_TEX1_COLOR (0x7<<2)
#define MC_ARG_DONT_REPLICATE_ALPHA (0x0<<1)
#define MC_ARG_REPLICATE_ALPHA (0x1<<1)
#define MC_ARG_DONT_INVERT (0x0)
#define MC_ARG_INVERT (0x1)
#define MC_UPDATE_ARG1 (1<<17)
#define MC_ARG1_SHIFT 12
#define MC_ARG1_MASK (0x1f << MC_ARG1_SHIFT)
#define MC_UPDATE_ARG2 (1<<11)
#define MC_ARG2_SHIFT 6
#define MC_ARG2_MASK (0x1f << MC_ARG2_SHIFT)
#define MC_UPDATE_OP (1<<5)
#define MC_OP_MASK (0xf)
#define MC_OP_DISABLE (0x0)
#define MC_OP_ARG1 (0x1)
#define MC_OP_ARG2 (0x2)
#define MC_OP_MODULATE (0x3)
#define MC_OP_MODULATE_X2 (0x4)
#define MC_OP_MODULATE_X4 (0x5)
#define MC_OP_ADD (0x6)
#define MC_OP_ADD_SIGNED (0x7)
#define MC_OP_LIN_BLEND_ITER_ALPHA (0x8)
#define MC_OP_LIN_BLEND_ALPHA_FACTOR (0xa)
#define MC_OP_LIN_BLEND_TEX0_ALPHA (0x10)
#define MC_OP_LIN_BLEND_TEX1_ALPHA (0x11)
#define MC_OP_LIN_BLEND_TEX0_COLOR (0x12)
#define MC_OP_LIN_BLEND_TEX1_COLOR (0x13)
#define MC_OP_SUBTRACT (0x14)
/* GFXRENDERSTATE_MAP_PALETTE_LOAD, p128
*

View File

@ -73,7 +73,7 @@ int I810_DEBUG = (0);
PUBLIC const char __driConfigOptions[] = { 0 };
const GLuint __driNConfigOptions = 0;
#define DRIVER_DATE "20050818"
#define DRIVER_DATE "20050821"
static const GLubyte *i810GetString( GLcontext *ctx, GLenum name )
{
@ -125,9 +125,12 @@ const struct dri_extension card_extensions[] =
{ "GL_ARB_multitexture", NULL },
{ "GL_ARB_texture_compression", GL_ARB_texture_compression_functions },
{ "GL_ARB_texture_env_add", NULL },
{ "GL_ARB_texture_env_combine", NULL },
{ "GL_ARB_texture_env_crossbar", NULL },
{ "GL_ARB_texture_mirrored_repeat", NULL },
{ "GL_EXT_stencil_wrap", NULL },
{ "GL_EXT_texture_edge_clamp", NULL },
{ "GL_EXT_texture_env_combine", NULL },
{ "GL_EXT_texture_lod_bias", NULL },
{ "GL_MESA_ycbcr_texture", NULL },
{ "GL_NV_blend_square", NULL },

View File

@ -746,13 +746,13 @@ void i810InitState( GLcontext *ctx )
MC_UPDATE_DEST |
MC_DEST_CURRENT |
MC_UPDATE_ARG1 |
MC_ARG1_ITERATED_COLOR |
MC_ARG1_DONT_REPLICATE_ALPHA |
MC_ARG1_DONT_INVERT |
((MC_ARG_ITERATED_COLOR |
MC_ARG_DONT_REPLICATE_ALPHA |
MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
MC_UPDATE_ARG2 |
MC_ARG2_ONE |
MC_ARG2_DONT_REPLICATE_ALPHA |
MC_ARG2_DONT_INVERT |
((MC_ARG_ONE |
MC_ARG_DONT_REPLICATE_ALPHA |
MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
MC_UPDATE_OP |
MC_OP_ARG1 );
@ -761,13 +761,13 @@ void i810InitState( GLcontext *ctx )
MC_UPDATE_DEST |
MC_DEST_CURRENT |
MC_UPDATE_ARG1 |
MC_ARG1_ONE |
MC_ARG1_DONT_REPLICATE_ALPHA |
MC_ARG1_DONT_INVERT |
((MC_ARG_ONE |
MC_ARG_DONT_REPLICATE_ALPHA |
MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
MC_UPDATE_ARG2 |
MC_ARG2_ONE |
MC_ARG2_DONT_REPLICATE_ALPHA |
MC_ARG2_DONT_INVERT |
((MC_ARG_ONE |
MC_ARG_DONT_REPLICATE_ALPHA |
MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
MC_UPDATE_OP |
MC_OP_DISABLE );
@ -777,13 +777,13 @@ void i810InitState( GLcontext *ctx )
MC_UPDATE_DEST |
MC_DEST_CURRENT |
MC_UPDATE_ARG1 |
MC_ARG1_CURRENT_COLOR |
MC_ARG1_REPLICATE_ALPHA |
MC_ARG1_DONT_INVERT |
((MC_ARG_CURRENT_COLOR |
MC_ARG_REPLICATE_ALPHA |
MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
MC_UPDATE_ARG2 |
MC_ARG2_ONE |
MC_ARG2_DONT_REPLICATE_ALPHA |
MC_ARG2_DONT_INVERT |
((MC_ARG_ONE |
MC_ARG_DONT_REPLICATE_ALPHA |
MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
MC_UPDATE_OP |
MC_OP_DISABLE );
@ -791,11 +791,11 @@ void i810InitState( GLcontext *ctx )
imesa->Setup[I810_CTXREG_MA0] = ( GFX_OP_MAP_ALPHA_STAGES |
MA_STAGE_0 |
MA_UPDATE_ARG1 |
MA_ARG1_ITERATED_ALPHA |
MA_ARG1_DONT_INVERT |
((MA_ARG_ITERATED_ALPHA |
MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
MA_UPDATE_ARG2 |
MA_ARG2_CURRENT_ALPHA |
MA_ARG2_DONT_INVERT |
((MA_ARG_CURRENT_ALPHA |
MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
MA_UPDATE_OP |
MA_OP_ARG1 );
@ -803,11 +803,11 @@ void i810InitState( GLcontext *ctx )
imesa->Setup[I810_CTXREG_MA1] = ( GFX_OP_MAP_ALPHA_STAGES |
MA_STAGE_1 |
MA_UPDATE_ARG1 |
MA_ARG1_CURRENT_ALPHA |
MA_ARG1_DONT_INVERT |
((MA_ARG_CURRENT_ALPHA |
MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
MA_UPDATE_ARG2 |
MA_ARG2_CURRENT_ALPHA |
MA_ARG2_DONT_INVERT |
((MA_ARG_CURRENT_ALPHA |
MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
MA_UPDATE_OP |
MA_OP_ARG1 );
@ -815,11 +815,11 @@ void i810InitState( GLcontext *ctx )
imesa->Setup[I810_CTXREG_MA2] = ( GFX_OP_MAP_ALPHA_STAGES |
MA_STAGE_2 |
MA_UPDATE_ARG1 |
MA_ARG1_CURRENT_ALPHA |
MA_ARG1_DONT_INVERT |
((MA_ARG_CURRENT_ALPHA |
MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
MA_UPDATE_ARG2 |
MA_ARG2_CURRENT_ALPHA |
MA_ARG2_DONT_INVERT |
((MA_ARG_CURRENT_ALPHA |
MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
MA_UPDATE_OP |
MA_OP_ARG1 );

File diff suppressed because it is too large Load Diff