static void
emit_texblend(struct i830_context *i830, GLuint unit, GLuint blendUnit,
              bool last_stage)
{
   struct gl_texture_unit *texUnit = &i830->intel.ctx.Texture.Unit[unit];
   GLuint tmp[I830_TEXBLEND_SIZE], tmp_sz;


   if (0)
      fprintf(stderr, "%s unit %d\n", __func__, unit);

   /* Update i830->state.TexBlend
    */
   tmp_sz = i830SetTexEnvCombine(i830, texUnit->_CurrentCombine, blendUnit,
                                 GetTexelOp(unit), tmp, texUnit->EnvColor);

   if (last_stage)
      tmp[0] |= TEXOP_LAST_STAGE;

   if (tmp_sz != i830->state.TexBlendWordsUsed[blendUnit] ||
       memcmp(tmp, i830->state.TexBlend[blendUnit],
              tmp_sz * sizeof(GLuint))) {

      I830_STATECHANGE(i830, I830_UPLOAD_TEXBLEND(blendUnit));
      memcpy(i830->state.TexBlend[blendUnit], tmp, tmp_sz * sizeof(GLuint));
      i830->state.TexBlendWordsUsed[blendUnit] = tmp_sz;
   }

   I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND(blendUnit), true);
}
예제 #2
0
static void emit_passthrough( i830ContextPtr i830 )
{
   GLuint tmp[I830_TEXBLEND_SIZE], tmp_sz;
   GLuint unit = 0;

   tmp_sz = pass_through( tmp, unit );
   tmp[0] |= TEXOP_LAST_STAGE;

   if (tmp_sz != i830->state.TexBlendWordsUsed[unit] ||
       memcmp( tmp, i830->state.TexBlend[unit], tmp_sz * sizeof(GLuint))) {
      
      I830_STATECHANGE( i830, I830_UPLOAD_TEXBLEND(unit) );
      memcpy( i830->state.TexBlend[unit], tmp, tmp_sz * sizeof(GLuint));
      i830->state.TexBlendWordsUsed[unit] = tmp_sz;
   }

   I830_ACTIVESTATE(i830, I830_UPLOAD_TEXBLEND(unit), GL_TRUE);
}
예제 #3
0
파일: i830_state.c 프로젝트: nikai3d/mesa
void
i830InitState(struct i830_context *i830)
{
   struct gl_context *ctx = &i830->intel.ctx;

   i830_init_packets(i830);

   _mesa_init_driver_state(ctx);

   i830->state.emitted = 0;
   i830->state.active = (I830_UPLOAD_INVARIENT |
                         I830_UPLOAD_RASTER_RULES |
                         I830_UPLOAD_TEXBLEND(0) |
                         I830_UPLOAD_STIPPLE |
                         I830_UPLOAD_CTX | I830_UPLOAD_BUFFERS);
}
예제 #4
0
파일: i830_state.c 프로젝트: Starlink/mesa
void i830InitState( i830ContextPtr i830 )
{
   GLcontext *ctx = &i830->intel.ctx;

   i830_init_packets( i830 );

   intelInitState( ctx );

   memcpy( &i830->initial, &i830->state, sizeof(i830->state) );

   i830->current = &i830->state;
   i830->state.emitted = 0;
   i830->state.active = (I830_UPLOAD_TEXBLEND(0) |
			 I830_UPLOAD_STIPPLE |
			 I830_UPLOAD_CTX |
			 I830_UPLOAD_BUFFERS);
}
예제 #5
0
void
i830InitState(struct i830_context *i830)
{
   GLcontext *ctx = &i830->intel.ctx;

   i830_init_packets(i830);

   _mesa_init_driver_state(ctx);

   memcpy(&i830->initial, &i830->state, sizeof(i830->state));

   i830->current = &i830->state;
   i830->state.emitted = 0;
   i830->state.active = (I830_UPLOAD_INVARIENT |
                         I830_UPLOAD_TEXBLEND(0) |
                         I830_UPLOAD_STIPPLE |
                         I830_UPLOAD_CTX | I830_UPLOAD_BUFFERS);
}