Lines Matching full:setup
65 try_update_scene_state(struct lp_setup_context *setup);
69 lp_setup_wait_empty_scene(struct lp_setup_context *setup) in lp_setup_wait_empty_scene() argument
72 if (setup->scenes[0]->fence) { in lp_setup_wait_empty_scene()
73 lp_fence_wait(setup->scenes[0]->fence); in lp_setup_wait_empty_scene()
74 lp_scene_end_rasterization(setup->scenes[0]); in lp_setup_wait_empty_scene()
81 lp_setup_get_empty_scene(struct lp_setup_context *setup) in lp_setup_get_empty_scene() argument
83 assert(setup->scene == NULL); in lp_setup_get_empty_scene()
87 for (i = 0; i < setup->num_active_scenes; i++) { in lp_setup_get_empty_scene()
88 if (setup->scenes[i]->fence) { in lp_setup_get_empty_scene()
89 if (lp_fence_signalled(setup->scenes[i]->fence)) { in lp_setup_get_empty_scene()
90 lp_scene_end_rasterization(setup->scenes[i]); in lp_setup_get_empty_scene()
98 if (setup->num_active_scenes + 1 > MAX_SCENES) { in lp_setup_get_empty_scene()
99 i = lp_setup_wait_empty_scene(setup); in lp_setup_get_empty_scene()
100 } else if (i == setup->num_active_scenes) { in lp_setup_get_empty_scene()
102 struct lp_scene *scene = lp_scene_create(setup); in lp_setup_get_empty_scene()
105 i = lp_setup_wait_empty_scene(setup); in lp_setup_get_empty_scene()
107 LP_DBG(DEBUG_SETUP, "allocated scene: %d\n", setup->num_active_scenes); in lp_setup_get_empty_scene()
108 setup->scenes[setup->num_active_scenes] = scene; in lp_setup_get_empty_scene()
109 i = setup->num_active_scenes; in lp_setup_get_empty_scene()
110 setup->num_active_scenes++; in lp_setup_get_empty_scene()
114 setup->scene = setup->scenes[i]; in lp_setup_get_empty_scene()
115 setup->scene->permit_linear_rasterizer = setup->permit_linear_rasterizer; in lp_setup_get_empty_scene()
116 lp_scene_begin_binning(setup->scene, &setup->fb); in lp_setup_get_empty_scene()
121 first_triangle(struct lp_setup_context *setup, in first_triangle() argument
126 assert(setup->state == SETUP_ACTIVE); in first_triangle()
127 lp_setup_choose_triangle(setup); in first_triangle()
128 setup->triangle(setup, v0, v1, v2); in first_triangle()
133 first_rectangle(struct lp_setup_context *setup, in first_rectangle() argument
141 assert(setup->state == SETUP_ACTIVE); in first_rectangle()
142 lp_setup_choose_rect(setup); in first_rectangle()
143 return setup->rect(setup, v0, v1, v2, v3, v4, v5); in first_rectangle()
148 first_line(struct lp_setup_context *setup, in first_line() argument
152 assert(setup->state == SETUP_ACTIVE); in first_line()
153 lp_setup_choose_line(setup); in first_line()
154 setup->line(setup, v0, v1); in first_line()
159 first_point(struct lp_setup_context *setup, in first_point() argument
162 assert(setup->state == SETUP_ACTIVE); in first_point()
163 lp_setup_choose_point(setup); in first_point()
164 setup->point(setup, v0); in first_point()
169 lp_setup_reset(struct lp_setup_context *setup) in lp_setup_reset() argument
174 for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); ++i) { in lp_setup_reset()
175 setup->constants[i].stored_size = 0; in lp_setup_reset()
176 setup->constants[i].stored_data = NULL; in lp_setup_reset()
179 setup->fs.stored = NULL; in lp_setup_reset()
180 setup->dirty = ~0; in lp_setup_reset()
183 setup->scene = NULL; in lp_setup_reset()
187 memset(&setup->clear, 0, sizeof(setup->clear)); in lp_setup_reset()
192 setup->line = first_line; in lp_setup_reset()
193 setup->point = first_point; in lp_setup_reset()
194 setup->triangle = first_triangle; in lp_setup_reset()
195 setup->rect = first_rectangle; in lp_setup_reset()
201 lp_setup_rasterize_scene(struct lp_setup_context *setup) in lp_setup_rasterize_scene() argument
203 struct lp_scene *scene = setup->scene; in lp_setup_rasterize_scene()
206 scene->num_active_queries = setup->active_binned_queries; in lp_setup_rasterize_scene()
207 memcpy(scene->active_queries, setup->active_queries, in lp_setup_rasterize_scene()
216 lp_setup_reset(setup); in lp_setup_rasterize_scene()
223 begin_binning(struct lp_setup_context *setup) in begin_binning() argument
225 struct lp_scene *scene = setup->scene; in begin_binning()
232 scene->fence = lp_fence_create(MAX2(1, setup->num_threads)); in begin_binning()
236 if (!try_update_scene_state(setup)) { in begin_binning()
241 if (setup->fb.zsbuf && in begin_binning()
242 ((setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) != PIPE_CLEAR_DEPTHSTENCIL) && in begin_binning()
243 util_format_is_depth_and_stencil(setup->fb.zsbuf->format)) { in begin_binning()
248 setup->clear.flags >> 2, in begin_binning()
251 if (setup->clear.flags & PIPE_CLEAR_COLOR) { in begin_binning()
252 for (unsigned cbuf = 0; cbuf < setup->fb.nr_cbufs; cbuf++) { in begin_binning()
254 if (setup->clear.flags & (1 << (2 + cbuf))) { in begin_binning()
265 cc_scene->color_val = setup->clear.color_val[cbuf]; in begin_binning()
277 if (setup->fb.zsbuf) { in begin_binning()
278 if (setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) { in begin_binning()
282 setup->clear.zsvalue, in begin_binning()
283 setup->clear.zsmask))) { in begin_binning()
289 setup->clear.flags = 0; in begin_binning()
290 setup->clear.zsmask = 0; in begin_binning()
291 setup->clear.zsvalue = 0; in begin_binning()
293 scene->had_queries = !!setup->active_binned_queries; in begin_binning()
306 execute_clears(struct lp_setup_context *setup) in execute_clears() argument
310 return begin_binning(setup); in execute_clears()
322 set_scene_state(struct lp_setup_context *setup, in set_scene_state() argument
326 const unsigned old_state = setup->state; in set_scene_state()
339 if (new_state == SETUP_FLUSHED && setup->scene) in set_scene_state()
340 lp_debug_draw_bins_by_cmd_length(setup->scene); in set_scene_state()
346 lp_setup_get_empty_scene(setup); in set_scene_state()
352 if (!begin_binning(setup)) in set_scene_state()
357 if (!execute_clears(setup)) in set_scene_state()
359 lp_setup_rasterize_scene(setup); in set_scene_state()
360 assert(setup->scene == NULL); in set_scene_state()
363 assert(0 && "invalid setup state mode"); in set_scene_state()
367 setup->state = new_state; in set_scene_state()
371 if (setup->scene) { in set_scene_state()
372 lp_scene_end_rasterization(setup->scene); in set_scene_state()
373 setup->scene = NULL; in set_scene_state()
376 setup->state = SETUP_FLUSHED; in set_scene_state()
377 lp_setup_reset(setup); in set_scene_state()
383 lp_setup_flush(struct lp_setup_context *setup, in lp_setup_flush() argument
386 set_scene_state(setup, SETUP_FLUSHED, reason); in lp_setup_flush()
391 lp_setup_bind_framebuffer(struct lp_setup_context *setup, in lp_setup_bind_framebuffer() argument
398 set_scene_state(setup, SETUP_FLUSHED, __func__); in lp_setup_bind_framebuffer()
403 assert(!setup->scene); in lp_setup_bind_framebuffer()
408 util_copy_framebuffer_state(&setup->fb, fb); in lp_setup_bind_framebuffer()
409 setup->framebuffer.x0 = 0; in lp_setup_bind_framebuffer()
410 setup->framebuffer.y0 = 0; in lp_setup_bind_framebuffer()
411 setup->framebuffer.x1 = fb->width-1; in lp_setup_bind_framebuffer()
412 setup->framebuffer.y1 = fb->height-1; in lp_setup_bind_framebuffer()
413 setup->viewport_index_slot = -1; in lp_setup_bind_framebuffer()
414 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_bind_framebuffer()
423 lp_setup_try_clear_color_buffer(struct lp_setup_context *setup, in lp_setup_try_clear_color_buffer() argument
429 const enum pipe_format format = setup->fb.cbufs[cbuf]->format; in lp_setup_try_clear_color_buffer()
431 LP_DBG(DEBUG_SETUP, "%s state %d\n", __func__, setup->state); in lp_setup_try_clear_color_buffer()
435 if (setup->state == SETUP_ACTIVE) { in lp_setup_try_clear_color_buffer()
436 struct lp_scene *scene = setup->scene; in lp_setup_try_clear_color_buffer()
467 set_scene_state(setup, SETUP_CLEARED, __func__); in lp_setup_try_clear_color_buffer()
470 setup->clear.flags |= 1 << (cbuf + 2); in lp_setup_try_clear_color_buffer()
471 setup->clear.color_val[cbuf] = uc; in lp_setup_try_clear_color_buffer()
479 lp_setup_try_clear_zs(struct lp_setup_context *setup, in lp_setup_try_clear_zs() argument
484 LP_DBG(DEBUG_SETUP, "%s state %d\n", __func__, setup->state); in lp_setup_try_clear_zs()
486 enum pipe_format format = setup->fb.zsbuf->format; in lp_setup_try_clear_zs()
506 if (setup->state == SETUP_ACTIVE) { in lp_setup_try_clear_zs()
507 struct lp_scene *scene = setup->scene; in lp_setup_try_clear_zs()
525 set_scene_state(setup, SETUP_CLEARED, __func__); in lp_setup_try_clear_zs()
527 setup->clear.flags |= flags; in lp_setup_try_clear_zs()
529 setup->clear.zsmask |= zsmask; in lp_setup_try_clear_zs()
530 setup->clear.zsvalue = in lp_setup_try_clear_zs()
531 (setup->clear.zsvalue & ~zsmask) | (zsvalue & zsmask); in lp_setup_try_clear_zs()
539 lp_setup_clear(struct lp_setup_context *setup, in lp_setup_clear() argument
553 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) { in lp_setup_clear()
554 set_scene_state(setup, SETUP_FLUSHED, __func__); in lp_setup_clear()
556 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) in lp_setup_clear()
563 for (unsigned i = 0; i < setup->fb.nr_cbufs; i++) { in lp_setup_clear()
564 if ((flags & (1 << (2 + i))) && setup->fb.cbufs[i]) { in lp_setup_clear()
565 if (!lp_setup_try_clear_color_buffer(setup, color, i)) { in lp_setup_clear()
566 set_scene_state(setup, SETUP_FLUSHED, __func__); in lp_setup_clear()
568 if (!lp_setup_try_clear_color_buffer(setup, color, i)) in lp_setup_clear()
578 lp_setup_bind_rasterizer(struct lp_setup_context *setup, in lp_setup_bind_rasterizer() argument
583 setup->ccw_is_frontface = rast->front_ccw; in lp_setup_bind_rasterizer()
584 setup->cullmode = rast->cull_face; in lp_setup_bind_rasterizer()
585 setup->triangle = first_triangle; in lp_setup_bind_rasterizer()
586 setup->rect = first_rectangle; in lp_setup_bind_rasterizer()
587 setup->multisample = rast->multisample; in lp_setup_bind_rasterizer()
588 setup->pixel_offset = rast->half_pixel_center ? 0.5f : 0.0f; in lp_setup_bind_rasterizer()
589 setup->bottom_edge_rule = rast->bottom_edge_rule; in lp_setup_bind_rasterizer()
591 if (setup->scissor_test != rast->scissor) { in lp_setup_bind_rasterizer()
592 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_bind_rasterizer()
593 setup->scissor_test = rast->scissor; in lp_setup_bind_rasterizer()
596 setup->flatshade_first = rast->flatshade_first; in lp_setup_bind_rasterizer()
597 setup->line_width = rast->line_width; in lp_setup_bind_rasterizer()
598 setup->rectangular_lines = rast->line_rectangular; in lp_setup_bind_rasterizer()
600 setup->point_size = rast->point_size; in lp_setup_bind_rasterizer()
601 setup->sprite_coord_enable = rast->sprite_coord_enable; in lp_setup_bind_rasterizer()
602 setup->sprite_coord_origin = rast->sprite_coord_mode; in lp_setup_bind_rasterizer()
603 setup->point_line_tri_clip = rast->point_line_tri_clip; in lp_setup_bind_rasterizer()
604 setup->point_size_per_vertex = rast->point_size_per_vertex; in lp_setup_bind_rasterizer()
605 setup->legacy_points = !rast->point_quad_rasterization && !setup->multisample; in lp_setup_bind_rasterizer()
610 lp_setup_set_setup_variant(struct lp_setup_context *setup, in lp_setup_set_setup_variant() argument
615 setup->setup.variant = variant; in lp_setup_set_setup_variant()
620 lp_setup_set_fs_variant(struct lp_setup_context *setup, in lp_setup_set_fs_variant() argument
625 setup->fs.current.variant = variant; in lp_setup_set_fs_variant()
626 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fs_variant()
631 lp_setup_set_fs_constants(struct lp_setup_context *setup, in lp_setup_set_fs_constants() argument
637 assert(num <= ARRAY_SIZE(setup->constants)); in lp_setup_set_fs_constants()
641 util_copy_constant_buffer(&setup->constants[i].current, in lp_setup_set_fs_constants()
644 for (; i < ARRAY_SIZE(setup->constants); i++) { in lp_setup_set_fs_constants()
645 util_copy_constant_buffer(&setup->constants[i].current, NULL, false); in lp_setup_set_fs_constants()
647 setup->dirty |= LP_SETUP_NEW_CONSTANTS; in lp_setup_set_fs_constants()
652 lp_setup_set_fs_ssbos(struct lp_setup_context *setup, in lp_setup_set_fs_ssbos() argument
659 assert(num <= ARRAY_SIZE(setup->ssbos)); in lp_setup_set_fs_ssbos()
663 util_copy_shader_buffer(&setup->ssbos[i].current, &buffers[i]); in lp_setup_set_fs_ssbos()
665 for (; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_set_fs_ssbos()
666 util_copy_shader_buffer(&setup->ssbos[i].current, NULL); in lp_setup_set_fs_ssbos()
668 setup->ssbo_write_mask = ssbo_write_mask; in lp_setup_set_fs_ssbos()
669 setup->dirty |= LP_SETUP_NEW_SSBOS; in lp_setup_set_fs_ssbos()
674 lp_setup_set_fs_images(struct lp_setup_context *setup, in lp_setup_set_fs_images() argument
682 assert(num <= ARRAY_SIZE(setup->images)); in lp_setup_set_fs_images()
686 util_copy_image_view(&setup->images[i].current, &images[i]); in lp_setup_set_fs_images()
689 struct lp_jit_image *jit_image = &setup->fs.current.jit_resources.images[i]; in lp_setup_set_fs_images()
696 for (; i < ARRAY_SIZE(setup->images); i++) { in lp_setup_set_fs_images()
697 util_copy_image_view(&setup->images[i].current, NULL); in lp_setup_set_fs_images()
699 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fs_images()
704 lp_setup_set_alpha_ref_value(struct lp_setup_context *setup, in lp_setup_set_alpha_ref_value() argument
709 if (setup->fs.current.jit_context.alpha_ref_value != alpha_ref_value) { in lp_setup_set_alpha_ref_value()
710 setup->fs.current.jit_context.alpha_ref_value = alpha_ref_value; in lp_setup_set_alpha_ref_value()
711 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_alpha_ref_value()
717 lp_setup_set_stencil_ref_values(struct lp_setup_context *setup, in lp_setup_set_stencil_ref_values() argument
722 if (setup->fs.current.jit_context.stencil_ref_front != refs[0] || in lp_setup_set_stencil_ref_values()
723 setup->fs.current.jit_context.stencil_ref_back != refs[1]) { in lp_setup_set_stencil_ref_values()
724 setup->fs.current.jit_context.stencil_ref_front = refs[0]; in lp_setup_set_stencil_ref_values()
725 setup->fs.current.jit_context.stencil_ref_back = refs[1]; in lp_setup_set_stencil_ref_values()
726 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_stencil_ref_values()
732 lp_setup_set_blend_color(struct lp_setup_context *setup, in lp_setup_set_blend_color() argument
739 if (memcmp(&setup->blend_color.current, in lp_setup_set_blend_color()
741 memcpy(&setup->blend_color.current, blend_color, sizeof *blend_color); in lp_setup_set_blend_color()
742 setup->dirty |= LP_SETUP_NEW_BLEND_COLOR; in lp_setup_set_blend_color()
748 lp_setup_set_scissors(struct lp_setup_context *setup, in lp_setup_set_scissors() argument
756 setup->scissors[i].x0 = scissors[i].minx; in lp_setup_set_scissors()
757 setup->scissors[i].x1 = scissors[i].maxx-1; in lp_setup_set_scissors()
758 setup->scissors[i].y0 = scissors[i].miny; in lp_setup_set_scissors()
759 setup->scissors[i].y1 = scissors[i].maxy-1; in lp_setup_set_scissors()
761 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_set_scissors()
766 lp_setup_set_sample_mask(struct lp_setup_context *setup, in lp_setup_set_sample_mask() argument
769 if (setup->fs.current.jit_context.sample_mask != sample_mask) { in lp_setup_set_sample_mask()
770 setup->fs.current.jit_context.sample_mask = sample_mask; in lp_setup_set_sample_mask()
771 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_sample_mask()
777 lp_setup_set_rasterizer_discard(struct lp_setup_context *setup, in lp_setup_set_rasterizer_discard() argument
780 if (setup->rasterizer_discard != rasterizer_discard) { in lp_setup_set_rasterizer_discard()
781 setup->rasterizer_discard = rasterizer_discard; in lp_setup_set_rasterizer_discard()
782 setup->line = first_line; in lp_setup_set_rasterizer_discard()
783 setup->point = first_point; in lp_setup_set_rasterizer_discard()
784 setup->triangle = first_triangle; in lp_setup_set_rasterizer_discard()
785 setup->rect = first_rectangle; in lp_setup_set_rasterizer_discard()
791 lp_setup_set_vertex_info(struct lp_setup_context *setup, in lp_setup_set_vertex_info() argument
796 setup->vertex_info = vertex_info; in lp_setup_set_vertex_info()
801 lp_setup_set_linear_mode(struct lp_setup_context *setup, in lp_setup_set_linear_mode() argument
810 setup->permit_linear_rasterizer = (mode && in lp_setup_set_linear_mode()
813 setup->permit_linear_rasterizer = false; in lp_setup_set_linear_mode()
822 lp_setup_set_viewports(struct lp_setup_context *setup, in lp_setup_set_viewports() argument
826 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe); in lp_setup_set_viewports()
848 setup->vpwh.x0 = (int)(x0 + 0.499f); in lp_setup_set_viewports()
849 setup->vpwh.x1 = (int)(viewports[0].scale[0] * 2.0f + x0 - 0.501f); in lp_setup_set_viewports()
850 setup->vpwh.y0 = (int)(y0 + 0.499f); in lp_setup_set_viewports()
851 setup->vpwh.y1 = (int)(half_height * 2.0f + y0 - 0.501f); in lp_setup_set_viewports()
852 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_set_viewports()
862 if (setup->viewports[i].min_depth != min_depth || in lp_setup_set_viewports()
863 setup->viewports[i].max_depth != max_depth) { in lp_setup_set_viewports()
864 setup->viewports[i].min_depth = min_depth; in lp_setup_set_viewports()
865 setup->viewports[i].max_depth = max_depth; in lp_setup_set_viewports()
866 setup->dirty |= LP_SETUP_NEW_VIEWPORTS; in lp_setup_set_viewports()
876 lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup, in lp_setup_set_fragment_sampler_views() argument
884 const unsigned max_tex_num = MAX2(num, setup->fs.current_tex_num); in lp_setup_set_fragment_sampler_views()
892 if (setup->fs.current_tex[i]) in lp_setup_set_fragment_sampler_views()
893 llvmpipe_resource_unmap(setup->fs.current_tex[i], 0, 0); in lp_setup_set_fragment_sampler_views()
898 jit_tex = &setup->fs.current.jit_resources.textures[i]; in lp_setup_set_fragment_sampler_views()
903 pipe_resource_reference(&setup->fs.current_tex[i], res); in lp_setup_set_fragment_sampler_views()
907 pipe_resource_reference(&setup->fs.current_tex[i], NULL); in lp_setup_set_fragment_sampler_views()
910 setup->fs.current_tex_num = num; in lp_setup_set_fragment_sampler_views()
912 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fragment_sampler_views()
920 lp_setup_set_fragment_sampler_state(struct lp_setup_context *setup, in lp_setup_set_fragment_sampler_state() argument
933 jit_sam = &setup->fs.current.jit_resources.samplers[i]; in lp_setup_set_fragment_sampler_state()
939 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fragment_sampler_state()
949 lp_setup_is_resource_referenced(const struct lp_setup_context *setup, in lp_setup_is_resource_referenced() argument
953 for (unsigned i = 0; i < setup->fb.nr_cbufs; i++) { in lp_setup_is_resource_referenced()
954 if (setup->fb.cbufs[i] && setup->fb.cbufs[i]->texture == texture) in lp_setup_is_resource_referenced()
957 if (setup->fb.zsbuf && setup->fb.zsbuf->texture == texture) { in lp_setup_is_resource_referenced()
962 for (unsigned i = 0; i < setup->num_active_scenes; i++) { in lp_setup_is_resource_referenced()
963 struct lp_scene *scene = setup->scenes[i]; in lp_setup_is_resource_referenced()
989 try_update_scene_state(struct lp_setup_context *setup) in try_update_scene_state() argument
991 bool new_scene = (setup->fs.stored == NULL); in try_update_scene_state()
992 struct lp_scene *scene = setup->scene; in try_update_scene_state()
996 if (setup->dirty & LP_SETUP_NEW_VIEWPORTS) { in try_update_scene_state()
1006 lp_scene_alloc(scene, sizeof setup->viewports); in try_update_scene_state()
1013 memcpy(stored, setup->viewports, sizeof setup->viewports); in try_update_scene_state()
1015 setup->fs.current.jit_context.viewports = stored; in try_update_scene_state()
1016 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1019 if (setup->dirty & LP_SETUP_NEW_BLEND_COLOR) { in try_update_scene_state()
1035 fstored[i] = setup->blend_color.current.color[i % 4]; in try_update_scene_state()
1040 uint8_t c = float_to_ubyte(setup->blend_color.current.color[i]); in try_update_scene_state()
1046 setup->blend_color.stored = stored; in try_update_scene_state()
1047 setup->fs.current.jit_context.u8_blend_color = stored; in try_update_scene_state()
1048 setup->fs.current.jit_context.f_blend_color = fstored; in try_update_scene_state()
1049 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1052 struct llvmpipe_context *llvmpipe = llvmpipe_context(setup->pipe); in try_update_scene_state()
1054 lp_setup_set_fs_constants(llvmpipe->setup, in try_update_scene_state()
1058 if (setup->dirty & LP_SETUP_NEW_CONSTANTS) { in try_update_scene_state()
1059 for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); ++i) { in try_update_scene_state()
1060 lp_jit_buffer_from_pipe_const(&setup->fs.current.jit_resources.constants[i], in try_update_scene_state()
1061 &setup->constants[i].current, setup->pipe->screen); in try_update_scene_state()
1062 if (setup->constants[i].current.buffer && in try_update_scene_state()
1064 setup->constants[i].current.buffer, in try_update_scene_state()
1069 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1073 if (setup->dirty & LP_SETUP_NEW_SSBOS) { in try_update_scene_state()
1074 for (unsigned i = 0; i < ARRAY_SIZE(setup->ssbos); ++i) { in try_update_scene_state()
1075 lp_jit_buffer_from_pipe(&setup->fs.current.jit_resources.ssbos[i], in try_update_scene_state()
1076 &setup->ssbos[i].current); in try_update_scene_state()
1077 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1081 if (setup->dirty & LP_SETUP_NEW_FS) { in try_update_scene_state()
1082 if (!setup->fs.stored || in try_update_scene_state()
1083 memcmp(setup->fs.stored, in try_update_scene_state()
1084 &setup->fs.current, in try_update_scene_state()
1085 sizeof setup->fs.current) != 0) { in try_update_scene_state()
1088 * and append it to the bin's setup data buffer. in try_update_scene_state()
1098 &setup->fs.current.jit_context, in try_update_scene_state()
1099 sizeof setup->fs.current.jit_context); in try_update_scene_state()
1101 &setup->fs.current.jit_resources, in try_update_scene_state()
1102 sizeof setup->fs.current.jit_resources); in try_update_scene_state()
1104 stored->variant = setup->fs.current.variant; in try_update_scene_state()
1107 setup->fs.current.variant)) { in try_update_scene_state()
1111 setup->fs.stored = stored; in try_update_scene_state()
1116 for (unsigned i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) { in try_update_scene_state()
1117 if (setup->fs.current_tex[i]) { in try_update_scene_state()
1119 setup->fs.current_tex[i], in try_update_scene_state()
1127 for (unsigned i = 0; i < ARRAY_SIZE(setup->ssbos); i++) { in try_update_scene_state()
1128 if (setup->ssbos[i].current.buffer) { in try_update_scene_state()
1130 setup->ssbos[i].current.buffer, in try_update_scene_state()
1131 new_scene, setup->ssbo_write_mask & (1 << i))) { in try_update_scene_state()
1138 for (unsigned i = 0; i < ARRAY_SIZE(setup->images); i++) { in try_update_scene_state()
1139 if (setup->images[i].current.resource) { in try_update_scene_state()
1141 setup->images[i].current.resource, in try_update_scene_state()
1143 … setup->images[i].current.shader_access & PIPE_IMAGE_ACCESS_WRITE)) { in try_update_scene_state()
1152 if (setup->dirty & LP_SETUP_NEW_SCISSOR) { in try_update_scene_state()
1154 setup->draw_regions[i] = setup->framebuffer; in try_update_scene_state()
1155 if (setup->scissor_test) { in try_update_scene_state()
1156 u_rect_possible_intersection(&setup->scissors[i], in try_update_scene_state()
1157 &setup->draw_regions[i]); in try_update_scene_state()
1160 if (setup->permit_linear_rasterizer) { in try_update_scene_state()
1163 !!memcmp(&setup->vpwh, &setup->framebuffer, in try_update_scene_state()
1164 sizeof(setup->framebuffer)); in try_update_scene_state()
1166 assert(setup->viewport_index_slot < 0); in try_update_scene_state()
1168 u_rect_possible_intersection(&setup->vpwh, in try_update_scene_state()
1169 &setup->draw_regions[0]); in try_update_scene_state()
1171 } else if (setup->point_line_tri_clip) { in try_update_scene_state()
1184 !!memcmp(&setup->vpwh, &setup->framebuffer, in try_update_scene_state()
1185 sizeof(setup->framebuffer)); in try_update_scene_state()
1187 u_rect_possible_intersection(&setup->vpwh, in try_update_scene_state()
1188 &setup->draw_regions[0]); in try_update_scene_state()
1193 setup->dirty = 0; in try_update_scene_state()
1195 assert(setup->fs.stored); in try_update_scene_state()
1201 lp_setup_update_state(struct lp_setup_context *setup, in lp_setup_update_state() argument
1208 * setup code. This may get refactored/changed... in lp_setup_update_state()
1211 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe); in lp_setup_update_state()
1216 if (lp->setup->dirty) { in lp_setup_update_state()
1220 assert(setup->setup.variant); in lp_setup_update_state()
1225 setup->psize_slot = lp->psize_slot; in lp_setup_update_state()
1226 setup->viewport_index_slot = lp->viewport_index_slot; in lp_setup_update_state()
1227 setup->layer_slot = lp->layer_slot; in lp_setup_update_state()
1228 setup->face_slot = lp->face_slot; in lp_setup_update_state()
1233 setup->setup.variant->key.size); in lp_setup_update_state()
1236 &setup->setup.variant->key, in lp_setup_update_state()
1237 setup->setup.variant->key.size) == 0); in lp_setup_update_state()
1240 if (update_scene && setup->state != SETUP_ACTIVE) { in lp_setup_update_state()
1241 if (!set_scene_state(setup, SETUP_ACTIVE, __func__)) in lp_setup_update_state()
1248 if (update_scene && setup->scene) { in lp_setup_update_state()
1249 assert(setup->state == SETUP_ACTIVE); in lp_setup_update_state()
1251 if (try_update_scene_state(setup)) in lp_setup_update_state()
1259 if (!set_scene_state(setup, SETUP_FLUSHED, __func__)) in lp_setup_update_state()
1262 if (!set_scene_state(setup, SETUP_ACTIVE, __func__)) in lp_setup_update_state()
1265 if (!setup->scene) in lp_setup_update_state()
1268 return try_update_scene_state(setup); in lp_setup_update_state()
1279 lp_setup_destroy(struct lp_setup_context *setup) in lp_setup_destroy() argument
1281 lp_setup_reset(setup); in lp_setup_destroy()
1283 util_unreference_framebuffer_state(&setup->fb); in lp_setup_destroy()
1285 for (unsigned i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) { in lp_setup_destroy()
1286 struct pipe_resource **res_ptr = &setup->fs.current_tex[i]; in lp_setup_destroy()
1292 for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); i++) { in lp_setup_destroy()
1293 pipe_resource_reference(&setup->constants[i].current.buffer, NULL); in lp_setup_destroy()
1296 for (unsigned i = 0; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_destroy()
1297 pipe_resource_reference(&setup->ssbos[i].current.buffer, NULL); in lp_setup_destroy()
1300 for (unsigned i = 0; i < ARRAY_SIZE(setup->images); i++) { in lp_setup_destroy()
1301 pipe_resource_reference(&setup->images[i].current.resource, NULL); in lp_setup_destroy()
1305 for (unsigned i = 0; i < setup->num_active_scenes; i++) { in lp_setup_destroy()
1306 struct lp_scene *scene = setup->scenes[i]; in lp_setup_destroy()
1314 LP_DBG(DEBUG_SETUP, "number of scenes used: %d\n", setup->num_active_scenes); in lp_setup_destroy()
1315 slab_destroy(&setup->scene_slab); in lp_setup_destroy()
1317 FREE(setup); in lp_setup_destroy()
1331 struct lp_setup_context *setup = CALLOC_STRUCT(lp_setup_context); in lp_setup_create() local
1332 if (!setup) { in lp_setup_create()
1336 lp_setup_init_vbuf(setup); in lp_setup_create()
1338 setup->psize_slot = -1; in lp_setup_create()
1339 setup->viewport_index_slot = -1; in lp_setup_create()
1340 setup->layer_slot = -1; in lp_setup_create()
1341 setup->face_slot = -1; in lp_setup_create()
1345 setup->pipe = pipe; in lp_setup_create()
1347 setup->num_threads = screen->num_threads; in lp_setup_create()
1348 setup->vbuf = draw_vbuf_stage(draw, &setup->base); in lp_setup_create()
1349 if (!setup->vbuf) { in lp_setup_create()
1353 draw_set_rasterize_stage(draw, setup->vbuf); in lp_setup_create()
1354 draw_set_render(draw, &setup->base); in lp_setup_create()
1356 slab_create(&setup->scene_slab, in lp_setup_create()
1360 setup->scenes[0] = lp_scene_create(setup); in lp_setup_create()
1361 if (!setup->scenes[0]) { in lp_setup_create()
1364 setup->num_active_scenes++; in lp_setup_create()
1366 setup->triangle = first_triangle; in lp_setup_create()
1367 setup->line = first_line; in lp_setup_create()
1368 setup->point = first_point; in lp_setup_create()
1370 setup->dirty = ~0; in lp_setup_create()
1373 setup->framebuffer.x1 = -1; in lp_setup_create()
1374 setup->framebuffer.y1 = -1; in lp_setup_create()
1376 return setup; in lp_setup_create()
1380 if (setup->scenes[i]) { in lp_setup_create()
1381 lp_scene_destroy(setup->scenes[i]); in lp_setup_create()
1385 setup->vbuf->destroy(setup->vbuf); in lp_setup_create()
1387 FREE(setup); in lp_setup_create()
1397 lp_setup_begin_query(struct lp_setup_context *setup, in lp_setup_begin_query() argument
1400 set_scene_state(setup, SETUP_ACTIVE, "begin_query"); in lp_setup_begin_query()
1410 assert(setup->active_binned_queries < LP_MAX_ACTIVE_BINNED_QUERIES); in lp_setup_begin_query()
1412 if (setup->active_binned_queries >= LP_MAX_ACTIVE_BINNED_QUERIES) { in lp_setup_begin_query()
1415 assert(setup->active_queries[setup->active_binned_queries] == NULL); in lp_setup_begin_query()
1416 setup->active_queries[setup->active_binned_queries] = pq; in lp_setup_begin_query()
1417 setup->active_binned_queries++; in lp_setup_begin_query()
1419 assert(setup->scene); in lp_setup_begin_query()
1420 if (setup->scene) { in lp_setup_begin_query()
1421 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_begin_query()
1425 if (!lp_setup_flush_and_restart(setup)) in lp_setup_begin_query()
1428 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_begin_query()
1434 setup->scene->had_queries |= true; in lp_setup_begin_query()
1443 lp_setup_end_query(struct lp_setup_context *setup, struct llvmpipe_query *pq) in lp_setup_end_query() argument
1445 set_scene_state(setup, SETUP_ACTIVE, "end_query"); in lp_setup_end_query()
1447 assert(setup->scene); in lp_setup_end_query()
1448 if (setup->scene) { in lp_setup_end_query()
1452 lp_fence_reference(&pq->fence, setup->scene->fence); in lp_setup_end_query()
1461 !(setup->scene->tiles_x | setup->scene->tiles_y)) { in lp_setup_end_query()
1469 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_end_query()
1472 if (!lp_setup_flush_and_restart(setup)) in lp_setup_end_query()
1475 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_end_query()
1481 setup->scene->had_queries |= true; in lp_setup_end_query()
1484 struct llvmpipe_screen *screen = llvmpipe_screen(setup->pipe->screen); in lp_setup_end_query()
1502 for (i = 0; i < setup->active_binned_queries; i++) { in lp_setup_end_query()
1503 if (setup->active_queries[i] == pq) in lp_setup_end_query()
1506 assert(i < setup->active_binned_queries); in lp_setup_end_query()
1507 if (i == setup->active_binned_queries) in lp_setup_end_query()
1509 setup->active_binned_queries--; in lp_setup_end_query()
1510 setup->active_queries[i] = setup->active_queries[setup->active_binned_queries]; in lp_setup_end_query()
1511 setup->active_queries[setup->active_binned_queries] = NULL; in lp_setup_end_query()
1517 lp_setup_flush_and_restart(struct lp_setup_context *setup) in lp_setup_flush_and_restart() argument
1521 assert(setup->state == SETUP_ACTIVE); in lp_setup_flush_and_restart()
1523 if (!set_scene_state(setup, SETUP_FLUSHED, __func__)) in lp_setup_flush_and_restart()
1526 if (!lp_setup_update_state(setup, true)) in lp_setup_flush_and_restart()