lp_print_counters();
+ if (llvmpipe->blitter) {
+ util_blitter_destroy(llvmpipe->blitter);
+ }
+
/* This will also destroy llvmpipe->setup:
*/
if (llvmpipe->draw)
pipe_surface_reference(&llvmpipe->framebuffer.zsbuf, NULL);
- for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
+ for (i = 0; i < Elements(llvmpipe->sampler_views[0]); i++) {
pipe_sampler_view_reference(&llvmpipe->sampler_views[PIPE_SHADER_FRAGMENT][i], NULL);
}
- for (i = 0; i < PIPE_MAX_VERTEX_SAMPLERS; i++) {
+ for (i = 0; i < Elements(llvmpipe->sampler_views[0]); i++) {
pipe_sampler_view_reference(&llvmpipe->sampler_views[PIPE_SHADER_VERTEX][i], NULL);
}
for (i = 0; i < Elements(llvmpipe->constants); i++) {
for (j = 0; j < Elements(llvmpipe->constants[i]); j++) {
- pipe_resource_reference(&llvmpipe->constants[i][j], NULL);
+ pipe_resource_reference(&llvmpipe->constants[i][j].buffer, NULL);
}
}
static void
do_flush( struct pipe_context *pipe,
- struct pipe_fence_handle **fence)
+ struct pipe_fence_handle **fence,
+ enum pipe_flush_flags flags)
{
llvmpipe_flush(pipe, fence, __FUNCTION__);
}
if (!llvmpipe->setup)
goto fail;
+ llvmpipe->blitter = util_blitter_create(&llvmpipe->pipe);
+ if (!llvmpipe->blitter) {
+ goto fail;
+ }
+
+ /* must be done before installing Draw stages */
+ util_blitter_cache_all_shaders(llvmpipe->blitter);
+
/* plug in AA line/point stages */
draw_install_aaline_stage(llvmpipe->draw, &llvmpipe->pipe);
draw_install_aapoint_stage(llvmpipe->draw, &llvmpipe->pipe);