⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i830_vtbl.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 2 页
字号:
   BEGIN_BATCH( 200 );   OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(0));   OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(1));   OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(2));   OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(3));   OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD);   OUT_BATCH(0);   OUT_BATCH(_3DSTATE_DFLT_SPEC_CMD);   OUT_BATCH(0);   OUT_BATCH(_3DSTATE_DFLT_Z_CMD);   OUT_BATCH(0);   OUT_BATCH(_3DSTATE_FOG_MODE_CMD);   OUT_BATCH(FOGFUNC_ENABLE |	     FOG_LINEAR_CONST | 	     FOGSRC_INDEX_Z | 	     ENABLE_FOG_DENSITY);   OUT_BATCH(0);   OUT_BATCH(0);   OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |	     MAP_UNIT(0) |	     DISABLE_TEX_STREAM_BUMP |	     ENABLE_TEX_STREAM_COORD_SET |	     TEX_STREAM_COORD_SET(0) |	     ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(0));   OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |	     MAP_UNIT(1) |	     DISABLE_TEX_STREAM_BUMP |	     ENABLE_TEX_STREAM_COORD_SET |	     TEX_STREAM_COORD_SET(1) |	     ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(1));   OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |	     MAP_UNIT(2) |	     DISABLE_TEX_STREAM_BUMP |	     ENABLE_TEX_STREAM_COORD_SET |	     TEX_STREAM_COORD_SET(2) |	     ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(2));   OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |	     MAP_UNIT(3) |	     DISABLE_TEX_STREAM_BUMP |	     ENABLE_TEX_STREAM_COORD_SET |	     TEX_STREAM_COORD_SET(3) |	     ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(3));   OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);   OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(0));   OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);   OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(1));   OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);   OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(2));   OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);   OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(3));   OUT_BATCH(_3DSTATE_RASTER_RULES_CMD |	     ENABLE_POINT_RASTER_RULE |	     OGL_POINT_RASTER_RULE |	     ENABLE_LINE_STRIP_PROVOKE_VRTX |	     ENABLE_TRI_FAN_PROVOKE_VRTX |	     ENABLE_TRI_STRIP_PROVOKE_VRTX |	     LINE_STRIP_PROVOKE_VRTX(1) |	     TRI_FAN_PROVOKE_VRTX(2) | 	     TRI_STRIP_PROVOKE_VRTX(2));   OUT_BATCH(_3DSTATE_SCISSOR_ENABLE_CMD | 	     DISABLE_SCISSOR_RECT);   OUT_BATCH(_3DSTATE_SCISSOR_RECT_0_CMD);   OUT_BATCH(0);   OUT_BATCH(0);   OUT_BATCH(_3DSTATE_VERTEX_TRANSFORM);   OUT_BATCH(DISABLE_VIEWPORT_TRANSFORM | DISABLE_PERSPECTIVE_DIVIDE);   OUT_BATCH(_3DSTATE_W_STATE_CMD);   OUT_BATCH(MAGIC_W_STATE_DWORD1);   OUT_BATCH(0x3f800000 /* 1.0 in IEEE float */ );   OUT_BATCH(_3DSTATE_COLOR_FACTOR_CMD);   OUT_BATCH(0x80808080);	/* .5 required in alpha for GL_DOT3_RGBA_EXT */   ADVANCE_BATCH();}#define emit( intel, state, size )			\do {							\   int k;						\   BEGIN_BATCH( size / sizeof(GLuint));			\   for (k = 0 ; k < size / sizeof(GLuint) ; k++)	\      OUT_BATCH(state[k]);				\   ADVANCE_BATCH();					\} while (0);static GLuint get_state_size( struct i830_hw_state *state ){   GLuint dirty = state->active & ~state->emitted;   GLuint sz = 0;   GLuint i;   if (dirty & I830_UPLOAD_CTX)       sz += sizeof(state->Ctx);   if (dirty & I830_UPLOAD_BUFFERS)       sz += sizeof(state->Buffer);   if (dirty & I830_UPLOAD_STIPPLE)       sz += sizeof(state->Stipple);   for (i = 0; i < I830_TEX_UNITS; i++) {      if ((dirty & I830_UPLOAD_TEX(i)))  	 sz += sizeof(state->Tex[i]);       if (dirty & I830_UPLOAD_TEXBLEND(i)) 	 sz += state->TexBlendWordsUsed[i] * 4;   }   return sz;}/* Push the state into the sarea and/or texture memory. */static void i830_emit_state( intelContextPtr intel ){   i830ContextPtr i830 = I830_CONTEXT(intel);   struct i830_hw_state *state = i830->current;   int i;   GLuint dirty = state->active & ~state->emitted;   GLuint counter = intel->batch.counter;   BATCH_LOCALS;   if (intel->batch.space < get_state_size(state)) {      intelFlushBatch(intel, GL_TRUE);      dirty = state->active & ~state->emitted;      counter = intel->batch.counter;   }   if (dirty & I830_UPLOAD_CTX) {      if (VERBOSE) fprintf(stderr, "I830_UPLOAD_CTX:\n");       emit( i830, state->Ctx, sizeof(state->Ctx) );   }   if (dirty & I830_UPLOAD_BUFFERS) {      if (VERBOSE) fprintf(stderr, "I830_UPLOAD_BUFFERS:\n");       emit( i830, state->Buffer, sizeof(state->Buffer) );   }   if (dirty & I830_UPLOAD_STIPPLE) {      if (VERBOSE) fprintf(stderr, "I830_UPLOAD_STIPPLE:\n");       emit( i830, state->Stipple, sizeof(state->Stipple) );   }   for (i = 0; i < I830_TEX_UNITS; i++) {      if ((dirty & I830_UPLOAD_TEX(i))) {  	 if (VERBOSE) fprintf(stderr, "I830_UPLOAD_TEX(%d):\n", i); 	 emit( i830, state->Tex[i], sizeof(state->Tex[i]));       }       if (dirty & I830_UPLOAD_TEXBLEND(i)) {	 if (VERBOSE) fprintf(stderr, "I830_UPLOAD_TEXBLEND(%d):\n", i); 	 emit( i830, state->TexBlend[i], 	       state->TexBlendWordsUsed[i] * 4 );      }   }   state->emitted |= dirty;   intel->batch.last_emit_state = counter;   assert(counter == intel->batch.counter);}static void i830_destroy_context( intelContextPtr intel ){   _tnl_free_vertices(&intel->ctx);}static voidi830_set_color_region(intelContextPtr intel, const intelRegion *region){   i830ContextPtr i830 = I830_CONTEXT(intel);   I830_STATECHANGE( i830, I830_UPLOAD_BUFFERS );   i830->state.Buffer[I830_DESTREG_CBUFADDR1] =      (BUF_3D_ID_COLOR_BACK | BUF_3D_PITCH(region->pitch) | BUF_3D_USE_FENCE);   i830->state.Buffer[I830_DESTREG_CBUFADDR2] = region->offset;}static voidi830_set_z_region(intelContextPtr intel, const intelRegion *region){   i830ContextPtr i830 = I830_CONTEXT(intel);   I830_STATECHANGE( i830, I830_UPLOAD_BUFFERS );   i830->state.Buffer[I830_DESTREG_DBUFADDR1] =      (BUF_3D_ID_DEPTH | BUF_3D_PITCH(region->pitch) | BUF_3D_USE_FENCE);   i830->state.Buffer[I830_DESTREG_DBUFADDR2] = region->offset;}static voidi830_update_color_z_regions(intelContextPtr intel,                            const intelRegion *colorRegion,                            const intelRegion *depthRegion){   i830ContextPtr i830 = I830_CONTEXT(intel);   i830->state.Buffer[I830_DESTREG_CBUFADDR1] =      (BUF_3D_ID_COLOR_BACK | BUF_3D_PITCH(colorRegion->pitch) | BUF_3D_USE_FENCE);   i830->state.Buffer[I830_DESTREG_CBUFADDR2] = colorRegion->offset;   i830->state.Buffer[I830_DESTREG_DBUFADDR1] =      (BUF_3D_ID_DEPTH | BUF_3D_PITCH(depthRegion->pitch) | BUF_3D_USE_FENCE);   i830->state.Buffer[I830_DESTREG_DBUFADDR2] = depthRegion->offset;}/* This isn't really handled at the moment. */static void i830_lost_hardware( intelContextPtr intel ){   I830_CONTEXT(intel)->state.emitted = 0;}static void i830_emit_flush( intelContextPtr intel ){   BATCH_LOCALS;   BEGIN_BATCH(2);   OUT_BATCH( MI_FLUSH | FLUSH_MAP_CACHE );    OUT_BATCH( 0 );   ADVANCE_BATCH();}void i830InitVtbl( i830ContextPtr i830 ){   i830->intel.vtbl.alloc_tex_obj = i830AllocTexObj;   i830->intel.vtbl.check_vertex_size = i830_check_vertex_size;   i830->intel.vtbl.clear_with_tris = i830ClearWithTris;   i830->intel.vtbl.rotate_window = i830RotateWindow;   i830->intel.vtbl.destroy = i830_destroy_context;   i830->intel.vtbl.emit_invarient_state = i830_emit_invarient_state;   i830->intel.vtbl.emit_state = i830_emit_state;   i830->intel.vtbl.lost_hardware = i830_lost_hardware;   i830->intel.vtbl.reduced_primitive_state = i830_reduced_primitive_state;   i830->intel.vtbl.set_color_region = i830_set_color_region;   i830->intel.vtbl.set_z_region = i830_set_z_region;   i830->intel.vtbl.update_color_z_regions = i830_update_color_z_regions;   i830->intel.vtbl.update_texture_state = i830UpdateTextureState;   i830->intel.vtbl.emit_flush = i830_emit_flush;   i830->intel.vtbl.render_start = i830_render_start;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -