Lines Matching refs:scene
66 struct lp_scene *scene = CALLOC_STRUCT(lp_scene); in lp_scene_create() local
67 if (!scene) in lp_scene_create()
70 scene->pipe = pipe; in lp_scene_create()
72 scene->data.head = in lp_scene_create()
75 (void) mtx_init(&scene->mutex, mtx_plain); in lp_scene_create()
92 return scene; in lp_scene_create()
100 lp_scene_destroy(struct lp_scene *scene) in lp_scene_destroy() argument
102 lp_fence_reference(&scene->fence, NULL); in lp_scene_destroy()
103 mtx_destroy(&scene->mutex); in lp_scene_destroy()
104 assert(scene->data.head->next == NULL); in lp_scene_destroy()
105 FREE(scene->data.head); in lp_scene_destroy()
106 FREE(scene); in lp_scene_destroy()
115 lp_scene_is_empty(struct lp_scene *scene ) in lp_scene_is_empty() argument
119 for (y = 0; y < scene->tiles_y; y++) { in lp_scene_is_empty()
120 for (x = 0; x < scene->tiles_x; x++) { in lp_scene_is_empty()
121 const struct cmd_bin *bin = lp_scene_get_bin(scene, x, y); in lp_scene_is_empty()
136 lp_scene_is_oom(struct lp_scene *scene) in lp_scene_is_oom() argument
138 return scene->alloc_failed; in lp_scene_is_oom()
146 lp_scene_bin_reset(struct lp_scene *scene, unsigned x, unsigned y) in lp_scene_bin_reset() argument
148 struct cmd_bin *bin = lp_scene_get_bin(scene, x, y); in lp_scene_bin_reset()
160 lp_scene_begin_rasterization(struct lp_scene *scene) in lp_scene_begin_rasterization() argument
162 const struct pipe_framebuffer_state *fb = &scene->fb; in lp_scene_begin_rasterization()
167 for (i = 0; i < scene->fb.nr_cbufs; i++) { in lp_scene_begin_rasterization()
168 struct pipe_surface *cbuf = scene->fb.cbufs[i]; in lp_scene_begin_rasterization()
171 scene->cbufs[i].stride = 0; in lp_scene_begin_rasterization()
172 scene->cbufs[i].layer_stride = 0; in lp_scene_begin_rasterization()
173 scene->cbufs[i].sample_stride = 0; in lp_scene_begin_rasterization()
174 scene->cbufs[i].nr_samples = 0; in lp_scene_begin_rasterization()
175 scene->cbufs[i].map = NULL; in lp_scene_begin_rasterization()
180 scene->cbufs[i].stride = llvmpipe_resource_stride(cbuf->texture, in lp_scene_begin_rasterization()
182 scene->cbufs[i].layer_stride = llvmpipe_layer_stride(cbuf->texture, in lp_scene_begin_rasterization()
184 scene->cbufs[i].sample_stride = llvmpipe_sample_stride(cbuf->texture); in lp_scene_begin_rasterization()
186 scene->cbufs[i].map = llvmpipe_resource_map(cbuf->texture, in lp_scene_begin_rasterization()
190 scene->cbufs[i].format_bytes = util_format_get_blocksize(cbuf->format); in lp_scene_begin_rasterization()
191 scene->cbufs[i].nr_samples = util_res_sample_count(cbuf->texture); in lp_scene_begin_rasterization()
196 scene->cbufs[i].stride = cbuf->texture->width0; in lp_scene_begin_rasterization()
197 scene->cbufs[i].layer_stride = 0; in lp_scene_begin_rasterization()
198 scene->cbufs[i].sample_stride = 0; in lp_scene_begin_rasterization()
199 scene->cbufs[i].nr_samples = 1; in lp_scene_begin_rasterization()
200 scene->cbufs[i].map = lpr->data; in lp_scene_begin_rasterization()
201 scene->cbufs[i].map += cbuf->u.buf.first_element * pixstride; in lp_scene_begin_rasterization()
202 scene->cbufs[i].format_bytes = util_format_get_blocksize(cbuf->format); in lp_scene_begin_rasterization()
207 struct pipe_surface *zsbuf = scene->fb.zsbuf; in lp_scene_begin_rasterization()
208 scene->zsbuf.stride = llvmpipe_resource_stride(zsbuf->texture, zsbuf->u.tex.level); in lp_scene_begin_rasterization()
209 scene->zsbuf.layer_stride = llvmpipe_layer_stride(zsbuf->texture, zsbuf->u.tex.level); in lp_scene_begin_rasterization()
210 scene->zsbuf.sample_stride = llvmpipe_sample_stride(zsbuf->texture); in lp_scene_begin_rasterization()
211 scene->zsbuf.nr_samples = util_res_sample_count(zsbuf->texture); in lp_scene_begin_rasterization()
212 scene->zsbuf.map = llvmpipe_resource_map(zsbuf->texture, in lp_scene_begin_rasterization()
216 scene->zsbuf.format_bytes = util_format_get_blocksize(zsbuf->format); in lp_scene_begin_rasterization()
227 lp_scene_end_rasterization(struct lp_scene *scene ) in lp_scene_end_rasterization() argument
232 for (i = 0; i < scene->fb.nr_cbufs; i++) { in lp_scene_end_rasterization()
233 if (scene->cbufs[i].map) { in lp_scene_end_rasterization()
234 struct pipe_surface *cbuf = scene->fb.cbufs[i]; in lp_scene_end_rasterization()
240 scene->cbufs[i].map = NULL; in lp_scene_end_rasterization()
245 if (scene->zsbuf.map) { in lp_scene_end_rasterization()
246 struct pipe_surface *zsbuf = scene->fb.zsbuf; in lp_scene_end_rasterization()
250 scene->zsbuf.map = NULL; in lp_scene_end_rasterization()
255 for (i = 0; i < scene->tiles_x; i++) { in lp_scene_end_rasterization()
256 for (j = 0; j < scene->tiles_y; j++) { in lp_scene_end_rasterization()
257 struct cmd_bin *bin = lp_scene_get_bin(scene, i, j); in lp_scene_end_rasterization()
267 assert(lp_scene_is_empty(scene)); in lp_scene_end_rasterization()
275 for (ref = scene->resources; ref; ref = ref->next) { in lp_scene_end_rasterization()
291 j, scene->resource_reference_size); in lp_scene_end_rasterization()
300 for (ref = scene->frag_shaders; ref; ref = ref->next) { in lp_scene_end_rasterization()
305 lp_fs_variant_reference(llvmpipe_context(scene->pipe), &ref->variant[i], NULL); in lp_scene_end_rasterization()
313 struct data_block_list *list = &scene->data; in lp_scene_end_rasterization()
325 lp_fence_reference(&scene->fence, NULL); in lp_scene_end_rasterization()
327 scene->resources = NULL; in lp_scene_end_rasterization()
328 scene->frag_shaders = NULL; in lp_scene_end_rasterization()
329 scene->scene_size = 0; in lp_scene_end_rasterization()
330 scene->resource_reference_size = 0; in lp_scene_end_rasterization()
332 scene->alloc_failed = FALSE; in lp_scene_end_rasterization()
334 util_unreference_framebuffer_state( &scene->fb ); in lp_scene_end_rasterization()
343 lp_scene_new_cmd_block( struct lp_scene *scene, in lp_scene_new_cmd_block() argument
346 struct cmd_block *block = lp_scene_alloc(scene, sizeof(struct cmd_block)); in lp_scene_new_cmd_block()
365 lp_scene_new_data_block( struct lp_scene *scene ) in lp_scene_new_data_block() argument
367 if (scene->scene_size + DATA_BLOCK_SIZE > LP_SCENE_MAX_SIZE) { in lp_scene_new_data_block()
369 scene->alloc_failed = TRUE; in lp_scene_new_data_block()
377 scene->scene_size += sizeof *block; in lp_scene_new_data_block()
380 block->next = scene->data.head; in lp_scene_new_data_block()
381 scene->data.head = block; in lp_scene_new_data_block()
393 lp_scene_data_size( const struct lp_scene *scene ) in lp_scene_data_size() argument
397 for (block = scene->data.head; block; block = block->next) { in lp_scene_data_size()
409 lp_scene_add_resource_reference(struct lp_scene *scene, in lp_scene_add_resource_reference() argument
413 struct resource_ref *ref, **last = &scene->resources; in lp_scene_add_resource_reference()
418 for (ref = scene->resources; ref; ref = ref->next) { in lp_scene_add_resource_reference()
438 *last = lp_scene_alloc(scene, sizeof *ref); in lp_scene_add_resource_reference()
449 scene->resource_reference_size += llvmpipe_resource_size(resource); in lp_scene_add_resource_reference()
457 scene->resource_reference_size >= LP_SCENE_MAX_RESOURCE_SIZE) in lp_scene_add_resource_reference()
468 lp_scene_add_frag_shader_reference(struct lp_scene *scene, in lp_scene_add_frag_shader_reference() argument
471 struct shader_ref *ref, **last = &scene->frag_shaders; in lp_scene_add_frag_shader_reference()
476 for (ref = scene->frag_shaders; ref; ref = ref->next) { in lp_scene_add_frag_shader_reference()
496 *last = lp_scene_alloc(scene, sizeof *ref); in lp_scene_add_frag_shader_reference()
506 lp_fs_variant_reference(llvmpipe_context(scene->pipe), &ref->variant[ref->count++], variant); in lp_scene_add_frag_shader_reference()
515 lp_scene_is_resource_referenced(const struct lp_scene *scene, in lp_scene_is_resource_referenced() argument
521 for (ref = scene->resources; ref; ref = ref->next) { in lp_scene_is_resource_referenced()
535 next_bin(struct lp_scene *scene) in next_bin() argument
537 scene->curr_x++; in next_bin()
538 if (scene->curr_x >= scene->tiles_x) { in next_bin()
539 scene->curr_x = 0; in next_bin()
540 scene->curr_y++; in next_bin()
542 if (scene->curr_y >= scene->tiles_y) { in next_bin()
551 lp_scene_bin_iter_begin( struct lp_scene *scene ) in lp_scene_bin_iter_begin() argument
553 scene->curr_x = scene->curr_y = -1; in lp_scene_bin_iter_begin()
564 lp_scene_bin_iter_next( struct lp_scene *scene , int *x, int *y) in lp_scene_bin_iter_next() argument
568 mtx_lock(&scene->mutex); in lp_scene_bin_iter_next()
570 if (scene->curr_x < 0) { in lp_scene_bin_iter_next()
572 scene->curr_x = 0; in lp_scene_bin_iter_next()
573 scene->curr_y = 0; in lp_scene_bin_iter_next()
575 else if (!next_bin(scene)) { in lp_scene_bin_iter_next()
580 bin = lp_scene_get_bin(scene, scene->curr_x, scene->curr_y); in lp_scene_bin_iter_next()
581 *x = scene->curr_x; in lp_scene_bin_iter_next()
582 *y = scene->curr_y; in lp_scene_bin_iter_next()
586 mtx_unlock(&scene->mutex); in lp_scene_bin_iter_next()
591 void lp_scene_begin_binning(struct lp_scene *scene, in lp_scene_begin_binning() argument
597 assert(lp_scene_is_empty(scene)); in lp_scene_begin_binning()
599 util_copy_framebuffer_state(&scene->fb, fb); in lp_scene_begin_binning()
601 scene->tiles_x = align(fb->width, TILE_SIZE) / TILE_SIZE; in lp_scene_begin_binning()
602 scene->tiles_y = align(fb->height, TILE_SIZE) / TILE_SIZE; in lp_scene_begin_binning()
603 assert(scene->tiles_x <= TILES_X); in lp_scene_begin_binning()
604 assert(scene->tiles_y <= TILES_Y); in lp_scene_begin_binning()
612 for (i = 0; i < scene->fb.nr_cbufs; i++) { in lp_scene_begin_binning()
613 struct pipe_surface *cbuf = scene->fb.cbufs[i]; in lp_scene_begin_binning()
625 struct pipe_surface *zsbuf = scene->fb.zsbuf; in lp_scene_begin_binning()
628 scene->fb_max_layer = max_layer; in lp_scene_begin_binning()
629 scene->fb_max_samples = util_framebuffer_get_num_samples(fb); in lp_scene_begin_binning()
630 if (scene->fb_max_samples == 4) { in lp_scene_begin_binning()
632 scene->fixed_sample_pos[i][0] = util_iround(lp_sample_pos_4x[i][0] * FIXED_ONE); in lp_scene_begin_binning()
633 scene->fixed_sample_pos[i][1] = util_iround(lp_sample_pos_4x[i][1] * FIXED_ONE); in lp_scene_begin_binning()
639 void lp_scene_end_binning( struct lp_scene *scene ) in lp_scene_end_binning() argument
644 scene->scene_size); in lp_scene_end_binning()
646 lp_scene_data_size(scene)); in lp_scene_end_binning()
649 lp_debug_bins( scene ); in lp_scene_end_binning()