USE OR OTHER DEALINGS IN THE SOFTWARE.
**************************************************************************/
-/* $XFree86$ */
/*
* Authors:
* Eric Anholt <anholt@FreeBSD.org>
*/
-#include "glheader.h"
-#include "imports.h"
-#include "context.h"
-#include "macros.h"
-#include "texformat.h"
+#include "main/glheader.h"
+#include "main/imports.h"
+#include "main/colormac.h"
+#include "main/context.h"
+#include "main/macros.h"
#include "sis_context.h"
-#include "sis_state.h"
#include "sis_tex.h"
#include "sis_tris.h"
#include "sis_alloc.h"
/* Handle texenv stuff, called from validate_texture (renderstart) */
static void
-sis_set_texture_env0( GLcontext *ctx, struct gl_texture_object *texObj,
+sis_set_texture_env0( struct gl_context *ctx, struct gl_texture_object *texObj,
int unit )
{
sisContextPtr smesa = SIS_CONTEXT(ctx);
-
+ GLubyte c[4];
+
__GLSiSHardware *prev = &smesa->prev;
__GLSiSHardware *current = &smesa->current;
switch (texture_unit->EnvMode)
{
case GL_REPLACE:
- FALLBACK(smesa, SIS_FALLBACK_TEXENV0, 0);
switch (t->format)
{
case GL_ALPHA:
break;
case GL_LUMINANCE:
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor0 = STAGE0_C_CS;
current->hwTexBlendAlpha0 = STAGE0_A_AF;
break;
current->hwTexBlendColor0 = STAGE0_C_CS;
current->hwTexBlendAlpha0 = STAGE0_A_AS;
break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
case GL_MODULATE:
- FALLBACK(smesa, SIS_FALLBACK_TEXENV0, 0);
switch (t->format)
{
case GL_ALPHA:
break;
case GL_LUMINANCE:
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor0 = STAGE0_C_CFCS;
current->hwTexBlendAlpha0 = STAGE0_A_AF;
break;
current->hwTexBlendColor0 = STAGE0_C_CFCS;
current->hwTexBlendAlpha0 = STAGE0_A_AFAS;
break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
case GL_DECAL:
- FALLBACK(smesa, SIS_FALLBACK_TEXENV0, 0);
switch (t->format)
{
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor0 = STAGE0_C_CS;
current->hwTexBlendAlpha0 = STAGE0_A_AF;
break;
current->hwTexBlendColor0 = STAGE0_C_CFOMAS_CSAS;
current->hwTexBlendAlpha0 = STAGE0_A_AF;
break;
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ case GL_INTENSITY:
+ case GL_LUMINANCE_ALPHA:
+ current->hwTexBlendColor0 = STAGE0_C_CF;
+ current->hwTexBlendAlpha0 = STAGE0_A_AF;
+ break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
case GL_BLEND:
-#if 1 /* XXX Blending broken */
- FALLBACK(smesa, SIS_FALLBACK_TEXENV0, 1);
-#else
- FALLBACK(smesa, SIS_FALLBACK_TEXENV0, 0);
- current->hwTexEnvColor =
- ((GLint) (texture_unit->EnvColor[3])) << 24 |
- ((GLint) (texture_unit->EnvColor[0])) << 16 |
- ((GLint) (texture_unit->EnvColor[1])) << 8 |
- ((GLint) (texture_unit->EnvColor[2]));
+ UNCLAMPED_FLOAT_TO_RGBA_CHAN(c, texture_unit->EnvColor);
+ current->hwTexEnvColor = ((GLint) (c[3])) << 24 |
+ ((GLint) (c[0])) << 16 |
+ ((GLint) (c[1])) << 8 |
+ ((GLint) (c[2]));
switch (t->format)
{
case GL_ALPHA:
break;
case GL_LUMINANCE:
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor0 = STAGE0_C_CFOMCS_CCCS;
current->hwTexBlendAlpha0 = STAGE0_A_AF;
break;
current->hwTexBlendColor0 = STAGE0_C_CFOMCS_CCCS;
current->hwTexBlendAlpha0 = STAGE0_A_AFAS;
break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
-#endif
+
+ default:
+ sis_fatal_error("unknown env mode 0x%x\n", texture_unit->EnvMode);
}
if ((current->hwTexBlendColor0 != prev->hwTexBlendColor0) ||
/* Handle texenv stuff, called from validate_texture (renderstart) */
static void
-sis_set_texture_env1( GLcontext *ctx, struct gl_texture_object *texObj,
+sis_set_texture_env1( struct gl_context *ctx, struct gl_texture_object *texObj,
int unit)
{
sisContextPtr smesa = SIS_CONTEXT(ctx);
+ GLubyte c[4];
__GLSiSHardware *prev = &smesa->prev;
__GLSiSHardware *current = &smesa->current;
switch (texture_unit->EnvMode)
{
case GL_REPLACE:
- FALLBACK(smesa, SIS_FALLBACK_TEXENV1, 0);
switch (t->format)
{
case GL_ALPHA:
break;
case GL_LUMINANCE:
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor1 = STAGE1_C_CS;
current->hwTexBlendAlpha1 = STAGE1_A_AF;
break;
current->hwTexBlendColor1 = STAGE1_C_CS;
current->hwTexBlendAlpha1 = STAGE1_A_AS;
break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
case GL_MODULATE:
- FALLBACK(smesa, SIS_FALLBACK_TEXENV1, 0);
switch (t->format)
{
case GL_ALPHA:
break;
case GL_LUMINANCE:
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor1 = STAGE1_C_CFCS;
current->hwTexBlendAlpha1 = STAGE1_A_AF;
break;
current->hwTexBlendColor1 = STAGE1_C_CFCS;
current->hwTexBlendAlpha1 = STAGE1_A_AFAS;
break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
case GL_DECAL:
- FALLBACK(smesa, SIS_FALLBACK_TEXENV1, 0);
switch (t->format)
{
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor1 = STAGE1_C_CS;
current->hwTexBlendAlpha1 = STAGE1_A_AF;
break;
current->hwTexBlendColor1 = STAGE1_C_CFOMAS_CSAS;
current->hwTexBlendAlpha1 = STAGE1_A_AF;
break;
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ case GL_INTENSITY:
+ case GL_LUMINANCE_ALPHA:
+ current->hwTexBlendColor1 = STAGE1_C_CF;
+ current->hwTexBlendAlpha1 = STAGE1_A_AF;
+ break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
case GL_BLEND:
- FALLBACK(smesa, SIS_FALLBACK_TEXENV1, 1);
-#if 0 /* XXX Blending broken */
- current->hwTexEnvColor =
- ((GLint) (texture_unit->EnvColor[3])) << 24 |
- ((GLint) (texture_unit->EnvColor[0])) << 16 |
- ((GLint) (texture_unit->EnvColor[1])) << 8 |
- ((GLint) (texture_unit->EnvColor[2]));
+ UNCLAMPED_FLOAT_TO_RGBA_CHAN(c, texture_unit->EnvColor);
+ current->hwTexEnvColor = ((GLint) (c[3])) << 24 |
+ ((GLint) (c[0])) << 16 |
+ ((GLint) (c[1])) << 8 |
+ ((GLint) (c[2]));
switch (t->format)
{
case GL_ALPHA:
break;
case GL_LUMINANCE:
case GL_RGB:
+ case GL_YCBCR_MESA:
current->hwTexBlendColor1 = STAGE1_C_CFOMCS_CCCS;
current->hwTexBlendAlpha1 = STAGE1_A_AF;
break;
current->hwTexBlendColor1 = STAGE1_C_CFOMCS_CCCS;
current->hwTexBlendAlpha1 = STAGE1_A_AFAS;
break;
+ default:
+ sis_fatal_error("unknown base format 0x%x\n", t->format);
}
break;
-#endif
+
+ default:
+ sis_fatal_error("unknown env mode 0x%x\n", texture_unit->EnvMode);
}
if ((current->hwTexBlendColor1 != prev->hwTexBlendColor1) ||
/* Returns 0 if a software fallback is necessary */
static GLboolean
-sis_set_texobj_parm( GLcontext *ctx, struct gl_texture_object *texObj,
+sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
int hw_unit )
{
sisContextPtr smesa = SIS_CONTEXT(ctx);
break;
}
- current->texture[hw_unit].hwTextureBorderColor =
- ((GLuint) texObj->_BorderChan[3] << 24) +
- ((GLuint) texObj->_BorderChan[0] << 16) +
- ((GLuint) texObj->_BorderChan[1] << 8) +
- ((GLuint) texObj->_BorderChan[2]);
+ {
+ GLubyte c[4];
+ CLAMPED_FLOAT_TO_UBYTE(c[0], texObj->BorderColor.f[0]);
+ CLAMPED_FLOAT_TO_UBYTE(c[1], texObj->BorderColor.f[1]);
+ CLAMPED_FLOAT_TO_UBYTE(c[2], texObj->BorderColor.f[2]);
+ CLAMPED_FLOAT_TO_UBYTE(c[3], texObj->BorderColor.f[3]);
+
+ current->texture[hw_unit].hwTextureBorderColor =
+ PACK_COLOR_8888(c[3], c[0], c[1], c[2]);
+ }
if (current->texture[hw_unit].hwTextureBorderColor !=
prev->texture[hw_unit].hwTextureBorderColor)
/* Disable a texture unit, called from validate_texture */
static void
-sis_reset_texture_env (GLcontext *ctx, int hw_unit)
+sis_reset_texture_env (struct gl_context *ctx, int hw_unit)
{
sisContextPtr smesa = SIS_CONTEXT(ctx);
}
}
-static void updateTextureUnit( GLcontext *ctx, int unit )
+static void updateTextureUnit( struct gl_context *ctx, int unit )
{
sisContextPtr smesa = SIS_CONTEXT( ctx );
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
}
-void sisUpdateTextureState( GLcontext *ctx )
+void sisUpdateTextureState( struct gl_context *ctx )
{
sisContextPtr smesa = SIS_CONTEXT( ctx );
int i;