/** * Rasterize/execute all bins within a scene. * Called per thread. */ static void rasterize_scene(struct lp_rasterizer_task *task, struct lp_scene *scene) { task->scene = scene; if (!task->rast->no_rast && !scene->discard) { /* loop over scene bins, rasterize each */ { struct cmd_bin *bin; int i, j; assert(scene); while ((bin = lp_scene_bin_iter_next(scene, &i, &j))) { if (!is_empty_bin( bin )) rasterize_bin(task, bin, i, j); } } } if (scene->fence) { lp_fence_signal(scene->fence); } task->scene = NULL; }
/** * Rasterize/execute all bins within a scene. * Called per thread. */ static void rasterize_scene(struct lp_rasterizer_task *task, struct lp_scene *scene) { task->scene = scene; /* loop over scene bins, rasterize each */ #if 0 { unsigned i, j; for (i = 0; i < scene->tiles_x; i++) { for (j = 0; j < scene->tiles_y; j++) { struct cmd_bin *bin = lp_scene_get_bin(scene, i, j); rasterize_bin(task, bin, i, j); } } } #else { struct cmd_bin *bin; assert(scene); while ((bin = lp_scene_bin_iter_next(scene))) { if (!is_empty_bin( bin )) rasterize_bin(task, bin); } } #endif if (scene->fence) { lp_fence_signal(scene->fence); } task->scene = NULL; }
/** * Rasterize/execute all bins within a scene. * Called per thread. */ static void rasterize_scene(struct lp_rasterizer_task *task, struct lp_scene *scene) { task->scene = scene; /* Clear the cache tags. This should not always be necessary but simpler for now. */ #if LP_USE_TEXTURE_CACHE memset(task->thread_data.cache->cache_tags, 0, sizeof(task->thread_data.cache->cache_tags)); #if LP_BUILD_FORMAT_CACHE_DEBUG task->thread_data.cache->cache_access_total = 0; task->thread_data.cache->cache_access_miss = 0; #endif #endif if (!task->rast->no_rast && !scene->discard) { /* loop over scene bins, rasterize each */ { struct cmd_bin *bin; int i, j; assert(scene); while ((bin = lp_scene_bin_iter_next(scene, &i, &j))) { if (!is_empty_bin( bin )) rasterize_bin(task, bin, i, j); } } } #if LP_BUILD_FORMAT_CACHE_DEBUG { uint64_t total, miss; total = task->thread_data.cache->cache_access_total; miss = task->thread_data.cache->cache_access_miss; if (total) { debug_printf("thread %d cache access %llu miss %llu hit rate %f\n", task->thread_index, (long long unsigned)total, (long long unsigned)miss, (float)(total - miss)/(float)total); } } #endif if (scene->fence) { lp_fence_signal(scene->fence); } task->scene = NULL; }