/**************************************************************************
*
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2003 VMware, Inc.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
-#include "glheader.h"
-#include "macros.h"
-#include "mtypes.h"
-#include "simple_list.h"
-#include "enums.h"
-#include "texformat.h"
-#include "texstore.h"
-
-#include "mm.h"
+#include "main/glheader.h"
+#include "main/macros.h"
+#include "main/mtypes.h"
+#include "main/enums.h"
#include "intel_screen.h"
-#include "intel_ioctl.h"
#include "intel_tex.h"
#include "i830_context.h"
}
-static INLINE GLuint
+static inline GLuint
GetTexelOp(GLint unit)
{
switch (unit) {
* environments are treated identically.
*
* \todo
- * This function should return \c GLboolean. When \c GL_FALSE is returned,
+ * This function should return \c bool. When \c false is returned,
* it means that an environment is selected that the hardware cannot do. This
* is the way the Radeon and R200 drivers work.
*
GLuint texel_op, GLuint * state, const GLfloat * factor)
{
const GLuint numColorArgs = combine->_NumArgsRGB;
- const GLuint numAlphaArgs = combine->_NumArgsA;
+ GLuint numAlphaArgs = combine->_NumArgsA;
GLuint blendop;
GLuint ablendop;
GLuint args_A[3];
GLuint rgb_shift;
GLuint alpha_shift;
- GLboolean need_factor = 0;
+ bool need_factor = 0;
int i;
unsigned used;
static const GLuint tex_blend_rgb[3] = {
};
if (INTEL_DEBUG & DEBUG_TEXTURE)
- fprintf(stderr, "%s\n", __FUNCTION__);
+ fprintf(stderr, "%s\n", __func__);
/* The EXT version of the DOT3 extension does not support the
break;
case GL_DOT3_RGBA_EXT:
case GL_DOT3_RGBA:
- blendop = TEXBLENDOP_DOT3;
+ blendop = TEXBLENDOP_DOT4;
break;
default:
return pass_through(state, blendUnit);
if (combine->ModeRGB == GL_DOT3_RGBA_EXT ||
combine->ModeRGB == GL_DOT3_RGBA) {
ablendop = TEXBLENDOP_DOT4;
+ numAlphaArgs = 2;
args_A[0] = TEXBLENDARG_FACTOR; /* the global factor */
args_A[1] = TEXBLENDARG_FACTOR;
args_A[2] = TEXBLENDARG_FACTOR;
static void
emit_texblend(struct i830_context *i830, GLuint unit, GLuint blendUnit,
- GLboolean last_stage)
+ bool last_stage)
{
- struct gl_texture_unit *texUnit = &i830->intel.ctx.Texture.Unit[unit];
+ struct gl_fixedfunc_texture_unit *texUnit =
+ &i830->intel.ctx.Texture.FixedFuncUnit[unit];
GLuint tmp[I830_TEXBLEND_SIZE], tmp_sz;
if (0)
- fprintf(stderr, "%s unit %d\n", __FUNCTION__, unit);
+ fprintf(stderr, "%s unit %d\n", __func__, unit);
/* Update i830->state.TexBlend
*/
i830->state.TexBlendWordsUsed[blendUnit] = tmp_sz;
}
- I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND(blendUnit), GL_TRUE);
+ I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND(blendUnit), true);
}
static void
i830->state.TexBlendWordsUsed[unit] = tmp_sz;
}
- I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND(unit), GL_TRUE);
+ I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND(unit), true);
}
void
i830EmitTextureBlend(struct i830_context *i830)
{
- GLcontext *ctx = &i830->intel.ctx;
- GLuint unit, last_stage = 0, blendunit = 0;
-
- I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND_ALL, GL_FALSE);
+ struct gl_context *ctx = &i830->intel.ctx;
+ GLuint unit, blendunit = 0;
- if (ctx->Texture._EnabledUnits) {
- for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++)
- if (ctx->Texture.Unit[unit]._ReallyEnabled)
- last_stage = unit;
+ I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND_ALL, false);
- for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++)
- if (ctx->Texture.Unit[unit]._ReallyEnabled)
- emit_texblend(i830, unit, blendunit++, last_stage == unit);
- }
- else {
+ if (ctx->Texture._MaxEnabledTexImageUnit != -1) {
+ for (unit = 0; unit <= ctx->Texture._MaxEnabledTexImageUnit; unit++)
+ if (ctx->Texture.Unit[unit]._Current)
+ emit_texblend(i830, unit, blendunit++,
+ unit == ctx->Texture._MaxEnabledTexImageUnit);
+ } else {
emit_passthrough(i830);
}
}