struct pipe_context * i915_create_context(struct pipe_screen *screen) { struct i915_context *i915; i915 = CALLOC_STRUCT(i915_context); if (i915 == NULL) return NULL; i915->iws = i915_screen(screen)->iws; i915->base.winsys = NULL; i915->base.screen = screen; i915->base.destroy = i915_destroy; i915->base.clear = i915_clear; i915->base.draw_arrays = i915_draw_arrays; i915->base.draw_elements = i915_draw_elements; i915->base.draw_range_elements = i915_draw_range_elements; i915->base.is_texture_referenced = i915_is_texture_referenced; i915->base.is_buffer_referenced = i915_is_buffer_referenced; /* * Create drawing context and plug our rendering stage into it. */ i915->draw = draw_create(); assert(i915->draw); if (!debug_get_bool_option("I915_NO_VBUF", FALSE)) { draw_set_rasterize_stage(i915->draw, i915_draw_vbuf_stage(i915)); } else { draw_set_rasterize_stage(i915->draw, i915_draw_render_stage(i915)); } i915_init_surface_functions(i915); i915_init_state_functions(i915); i915_init_flush_functions(i915); draw_install_aaline_stage(i915->draw, &i915->base); draw_install_aapoint_stage(i915->draw, &i915->base); i915->dirty = ~0; i915->hardware_dirty = ~0; /* Batch stream debugging is a bit hacked up at the moment: */ i915->batch = i915->iws->batchbuffer_create(i915->iws); return &i915->base; }
struct pipe_context * i915_create_context(struct pipe_screen *screen, void *priv) { struct i915_context *i915; i915 = CALLOC_STRUCT(i915_context); if (i915 == NULL) return NULL; i915->iws = i915_screen(screen)->iws; i915->base.screen = screen; i915->base.priv = priv; i915->base.destroy = i915_destroy; if (i915_screen(screen)->debug.use_blitter) i915->base.clear = i915_clear_blitter; else i915->base.clear = i915_clear_render; i915->base.draw_vbo = i915_draw_vbo; /* init this before draw */ util_slab_create(&i915->transfer_pool, sizeof(struct pipe_transfer), 16, UTIL_SLAB_SINGLETHREADED); util_slab_create(&i915->texture_transfer_pool, sizeof(struct i915_transfer), 16, UTIL_SLAB_SINGLETHREADED); /* Batch stream debugging is a bit hacked up at the moment: */ i915->batch = i915->iws->batchbuffer_create(i915->iws); /* * Create drawing context and plug our rendering stage into it. */ i915->draw = draw_create(&i915->base); assert(i915->draw); if (!debug_get_option_i915_no_vbuf()) { draw_set_rasterize_stage(i915->draw, i915_draw_vbuf_stage(i915)); } else { draw_set_rasterize_stage(i915->draw, i915_draw_render_stage(i915)); } i915_init_surface_functions(i915); i915_init_state_functions(i915); i915_init_flush_functions(i915); i915_init_resource_functions(i915); i915_init_query_functions(i915); draw_install_aaline_stage(i915->draw, &i915->base); draw_install_aapoint_stage(i915->draw, &i915->base); draw_enable_point_sprites(i915->draw, TRUE); /* augmented draw pipeline clobbers state functions */ i915_init_fixup_state_functions(i915); /* Create blitter last - calls state creation functions. */ i915->blitter = util_blitter_create(&i915->base); assert(i915->blitter); i915->dirty = ~0; i915->hardware_dirty = ~0; i915->immediate_dirty = ~0; i915->dynamic_dirty = ~0; i915->static_dirty = ~0; i915->flush_dirty = 0; return &i915->base; }