• Home
  • Raw
  • Download

Lines Matching refs:rast

70 lp_rast_begin(struct lp_rasterizer *rast,  in lp_rast_begin()  argument
73 rast->curr_scene = scene; in lp_rast_begin()
83 lp_rast_end(struct lp_rasterizer *rast) in lp_rast_end() argument
85 rast->curr_scene = NULL; in lp_rast_end()
1058 if (!task->rast->no_rast) { in rasterize_scene()
1099 lp_rast_queue_scene(struct lp_rasterizer *rast, in lp_rast_queue_scene() argument
1104 lp_fence_reference(&rast->last_fence, scene->fence); in lp_rast_queue_scene()
1105 if (rast->last_fence) in lp_rast_queue_scene()
1106 rast->last_fence->issued = TRUE; in lp_rast_queue_scene()
1108 if (rast->num_threads == 0) { in lp_rast_queue_scene()
1117 lp_rast_begin(rast, scene); in lp_rast_queue_scene()
1119 rasterize_scene(&rast->tasks[0], scene); in lp_rast_queue_scene()
1121 lp_rast_end(rast); in lp_rast_queue_scene()
1125 rast->curr_scene = NULL; in lp_rast_queue_scene()
1131 lp_scene_enqueue(rast->full_scenes, scene); in lp_rast_queue_scene()
1134 for (i = 0; i < rast->num_threads; i++) { in lp_rast_queue_scene()
1135 pipe_semaphore_signal(&rast->tasks[i].work_ready); in lp_rast_queue_scene()
1144 lp_rast_finish(struct lp_rasterizer *rast) in lp_rast_finish() argument
1146 if (rast->num_threads == 0) { in lp_rast_finish()
1153 for (i = 0; i < rast->num_threads; i++) { in lp_rast_finish()
1154 pipe_semaphore_wait(&rast->tasks[i].work_done); in lp_rast_finish()
1171 struct lp_rasterizer *rast = task->rast; in thread_function() local
1190 if (rast->exit_flag) in thread_function()
1198 lp_rast_begin(rast, lp_scene_dequeue(rast->full_scenes, TRUE)); in thread_function()
1204 util_barrier_wait(&rast->barrier); in thread_function()
1210 rasterize_scene(task, rast->curr_scene); in thread_function()
1213 util_barrier_wait(&rast->barrier); in thread_function()
1218 lp_rast_end(rast); in thread_function()
1240 create_rast_threads(struct lp_rasterizer *rast) in create_rast_threads() argument
1243 for (unsigned i = 0; i < rast->num_threads; i++) { in create_rast_threads()
1244 pipe_semaphore_init(&rast->tasks[i].work_ready, 0); in create_rast_threads()
1245 pipe_semaphore_init(&rast->tasks[i].work_done, 0); in create_rast_threads()
1246 if (thrd_success != u_thread_create(rast->threads + i, thread_function, in create_rast_threads()
1247 (void *) &rast->tasks[i])) { in create_rast_threads()
1248 rast->num_threads = i; /* previous thread is max */ in create_rast_threads()
1263 struct lp_rasterizer *rast; in lp_rast_create() local
1266 rast = CALLOC_STRUCT(lp_rasterizer); in lp_rast_create()
1267 if (!rast) { in lp_rast_create()
1271 rast->full_scenes = lp_scene_queue_create(); in lp_rast_create()
1272 if (!rast->full_scenes) { in lp_rast_create()
1277 struct lp_rasterizer_task *task = &rast->tasks[i]; in lp_rast_create()
1278 task->rast = rast; in lp_rast_create()
1287 rast->num_threads = num_threads; in lp_rast_create()
1289 rast->no_rast = debug_get_bool_option("LP_NO_RAST", FALSE); in lp_rast_create()
1291 create_rast_threads(rast); in lp_rast_create()
1294 if (rast->num_threads > 0) { in lp_rast_create()
1295 util_barrier_init(&rast->barrier, rast->num_threads); in lp_rast_create()
1300 return rast; in lp_rast_create()
1303 for (i = 0; i < MAX2(1, rast->num_threads); i++) { in lp_rast_create()
1304 if (rast->tasks[i].thread_data.cache) { in lp_rast_create()
1305 align_free(rast->tasks[i].thread_data.cache); in lp_rast_create()
1309 lp_scene_queue_destroy(rast->full_scenes); in lp_rast_create()
1311 FREE(rast); in lp_rast_create()
1320 lp_rast_destroy(struct lp_rasterizer *rast) in lp_rast_destroy() argument
1326 rast->exit_flag = TRUE; in lp_rast_destroy()
1327 for (unsigned i = 0; i < rast->num_threads; i++) { in lp_rast_destroy()
1328 pipe_semaphore_signal(&rast->tasks[i].work_ready); in lp_rast_destroy()
1334 for (unsigned i = 0; i < rast->num_threads; i++) { in lp_rast_destroy()
1340 if (GetExitCodeThread(rast->threads[i], &exit_code) && in lp_rast_destroy()
1342 pipe_semaphore_wait(&rast->tasks[i].work_done); in lp_rast_destroy()
1345 thrd_join(rast->threads[i], NULL); in lp_rast_destroy()
1350 for (unsigned i = 0; i < rast->num_threads; i++) { in lp_rast_destroy()
1351 pipe_semaphore_destroy(&rast->tasks[i].work_ready); in lp_rast_destroy()
1352 pipe_semaphore_destroy(&rast->tasks[i].work_done); in lp_rast_destroy()
1354 for (unsigned i = 0; i < MAX2(1, rast->num_threads); i++) { in lp_rast_destroy()
1355 align_free(rast->tasks[i].thread_data.cache); in lp_rast_destroy()
1358 lp_fence_reference(&rast->last_fence, NULL); in lp_rast_destroy()
1361 if (rast->num_threads > 0) { in lp_rast_destroy()
1362 util_barrier_destroy(&rast->barrier); in lp_rast_destroy()
1365 lp_scene_queue_destroy(rast->full_scenes); in lp_rast_destroy()
1367 FREE(rast); in lp_rast_destroy()
1370 void lp_rast_fence(struct lp_rasterizer *rast, in lp_rast_fence() argument
1374 lp_fence_reference((struct lp_fence **)fence, rast->last_fence); in lp_rast_fence()