Lines Matching full:setup
64 static boolean try_update_scene_state( struct lp_setup_context *setup );
68 lp_setup_get_empty_scene(struct lp_setup_context *setup) in lp_setup_get_empty_scene() argument
70 assert(setup->scene == NULL); in lp_setup_get_empty_scene()
72 setup->scene_idx++; in lp_setup_get_empty_scene()
73 setup->scene_idx %= ARRAY_SIZE(setup->scenes); in lp_setup_get_empty_scene()
75 setup->scene = setup->scenes[setup->scene_idx]; in lp_setup_get_empty_scene()
77 if (setup->scene->fence) { in lp_setup_get_empty_scene()
80 __FUNCTION__, setup->scene->fence->id); in lp_setup_get_empty_scene()
82 lp_fence_wait(setup->scene->fence); in lp_setup_get_empty_scene()
85 lp_scene_begin_binning(setup->scene, &setup->fb); in lp_setup_get_empty_scene()
91 first_triangle( struct lp_setup_context *setup, in first_triangle() argument
96 assert(setup->state == SETUP_ACTIVE); in first_triangle()
97 lp_setup_choose_triangle( setup ); in first_triangle()
98 setup->triangle( setup, v0, v1, v2 ); in first_triangle()
102 first_line( struct lp_setup_context *setup, in first_line() argument
106 assert(setup->state == SETUP_ACTIVE); in first_line()
107 lp_setup_choose_line( setup ); in first_line()
108 setup->line( setup, v0, v1 ); in first_line()
112 first_point( struct lp_setup_context *setup, in first_point() argument
115 assert(setup->state == SETUP_ACTIVE); in first_point()
116 lp_setup_choose_point( setup ); in first_point()
117 setup->point( setup, v0 ); in first_point()
120 void lp_setup_reset( struct lp_setup_context *setup ) in lp_setup_reset() argument
127 for (i = 0; i < ARRAY_SIZE(setup->constants); ++i) { in lp_setup_reset()
128 setup->constants[i].stored_size = 0; in lp_setup_reset()
129 setup->constants[i].stored_data = NULL; in lp_setup_reset()
132 setup->fs.stored = NULL; in lp_setup_reset()
133 setup->dirty = ~0; in lp_setup_reset()
136 setup->scene = NULL; in lp_setup_reset()
140 memset(&setup->clear, 0, sizeof setup->clear); in lp_setup_reset()
145 setup->line = first_line; in lp_setup_reset()
146 setup->point = first_point; in lp_setup_reset()
147 setup->triangle = first_triangle; in lp_setup_reset()
153 lp_setup_rasterize_scene( struct lp_setup_context *setup ) in lp_setup_rasterize_scene() argument
155 struct lp_scene *scene = setup->scene; in lp_setup_rasterize_scene()
158 scene->num_active_queries = setup->active_binned_queries; in lp_setup_rasterize_scene()
159 memcpy(scene->active_queries, setup->active_queries, in lp_setup_rasterize_scene()
164 lp_fence_reference(&setup->last_fence, scene->fence); in lp_setup_rasterize_scene()
166 if (setup->last_fence) in lp_setup_rasterize_scene()
167 setup->last_fence->issued = TRUE; in lp_setup_rasterize_scene()
174 * multiple scenes per setup is about - when we get a new empty scene in lp_setup_rasterize_scene()
185 lp_scene_end_rasterization(setup->scene); in lp_setup_rasterize_scene()
186 lp_setup_reset( setup ); in lp_setup_rasterize_scene()
194 begin_binning( struct lp_setup_context *setup ) in begin_binning() argument
196 struct lp_scene *scene = setup->scene; in begin_binning()
205 scene->fence = lp_fence_create(MAX2(1, setup->num_threads)); in begin_binning()
209 ok = try_update_scene_state(setup); in begin_binning()
213 if (setup->fb.zsbuf && in begin_binning()
214 ((setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) != PIPE_CLEAR_DEPTHSTENCIL) && in begin_binning()
215 util_format_is_depth_and_stencil(setup->fb.zsbuf->format)) in begin_binning()
219 setup->clear.flags >> 2, in begin_binning()
222 if (setup->clear.flags & PIPE_CLEAR_COLOR) { in begin_binning()
224 for (cbuf = 0; cbuf < setup->fb.nr_cbufs; cbuf++) { in begin_binning()
226 if (setup->clear.flags & (1 << (2 + cbuf))) { in begin_binning()
237 cc_scene->color_val = setup->clear.color_val[cbuf]; in begin_binning()
248 if (setup->fb.zsbuf) { in begin_binning()
249 if (setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) { in begin_binning()
253 setup->clear.zsvalue, in begin_binning()
254 setup->clear.zsmask)); in begin_binning()
260 setup->clear.flags = 0; in begin_binning()
261 setup->clear.zsmask = 0; in begin_binning()
262 setup->clear.zsvalue = 0; in begin_binning()
264 scene->had_queries = !!setup->active_binned_queries; in begin_binning()
277 execute_clears( struct lp_setup_context *setup ) in execute_clears() argument
281 return begin_binning( setup ); in execute_clears()
292 set_scene_state( struct lp_setup_context *setup, in set_scene_state() argument
296 unsigned old_state = setup->state; in set_scene_state()
309 if (new_state == SETUP_FLUSHED && setup->scene) in set_scene_state()
310 lp_debug_draw_bins_by_cmd_length(setup->scene); in set_scene_state()
316 lp_setup_get_empty_scene(setup); in set_scene_state()
323 if (!begin_binning( setup )) in set_scene_state()
329 if (!execute_clears( setup )) in set_scene_state()
332 lp_setup_rasterize_scene( setup ); in set_scene_state()
333 assert(setup->scene == NULL); in set_scene_state()
337 assert(0 && "invalid setup state mode"); in set_scene_state()
341 setup->state = new_state; in set_scene_state()
345 if (setup->scene) { in set_scene_state()
346 lp_scene_end_rasterization(setup->scene); in set_scene_state()
347 setup->scene = NULL; in set_scene_state()
350 setup->state = SETUP_FLUSHED; in set_scene_state()
351 lp_setup_reset( setup ); in set_scene_state()
357 lp_setup_flush( struct lp_setup_context *setup, in lp_setup_flush() argument
361 set_scene_state( setup, SETUP_FLUSHED, reason ); in lp_setup_flush()
364 lp_fence_reference((struct lp_fence **)fence, setup->last_fence); in lp_setup_flush()
372 lp_setup_bind_framebuffer( struct lp_setup_context *setup, in lp_setup_bind_framebuffer() argument
379 set_scene_state( setup, SETUP_FLUSHED, __FUNCTION__ ); in lp_setup_bind_framebuffer()
384 assert(!setup->scene); in lp_setup_bind_framebuffer()
389 util_copy_framebuffer_state(&setup->fb, fb); in lp_setup_bind_framebuffer()
390 setup->framebuffer.x0 = 0; in lp_setup_bind_framebuffer()
391 setup->framebuffer.y0 = 0; in lp_setup_bind_framebuffer()
392 setup->framebuffer.x1 = fb->width-1; in lp_setup_bind_framebuffer()
393 setup->framebuffer.y1 = fb->height-1; in lp_setup_bind_framebuffer()
394 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_bind_framebuffer()
403 lp_setup_try_clear_color_buffer(struct lp_setup_context *setup, in lp_setup_try_clear_color_buffer() argument
409 enum pipe_format format = setup->fb.cbufs[cbuf]->format; in lp_setup_try_clear_color_buffer()
411 LP_DBG(DEBUG_SETUP, "%s state %d\n", __FUNCTION__, setup->state); in lp_setup_try_clear_color_buffer()
415 if (setup->state == SETUP_ACTIVE) { in lp_setup_try_clear_color_buffer()
416 struct lp_scene *scene = setup->scene; in lp_setup_try_clear_color_buffer()
447 set_scene_state( setup, SETUP_CLEARED, __FUNCTION__ ); in lp_setup_try_clear_color_buffer()
450 setup->clear.flags |= 1 << (cbuf + 2); in lp_setup_try_clear_color_buffer()
451 setup->clear.color_val[cbuf] = uc; in lp_setup_try_clear_color_buffer()
458 lp_setup_try_clear_zs(struct lp_setup_context *setup, in lp_setup_try_clear_zs() argument
467 enum pipe_format format = setup->fb.zsbuf->format; in lp_setup_try_clear_zs()
469 LP_DBG(DEBUG_SETUP, "%s state %d\n", __FUNCTION__, setup->state); in lp_setup_try_clear_zs()
491 if (setup->state == SETUP_ACTIVE) { in lp_setup_try_clear_zs()
492 struct lp_scene *scene = setup->scene; in lp_setup_try_clear_zs()
511 set_scene_state( setup, SETUP_CLEARED, __FUNCTION__ ); in lp_setup_try_clear_zs()
513 setup->clear.flags |= flags; in lp_setup_try_clear_zs()
515 setup->clear.zsmask |= zsmask; in lp_setup_try_clear_zs()
516 setup->clear.zsvalue = in lp_setup_try_clear_zs()
517 (setup->clear.zsvalue & ~zsmask) | (zsvalue & zsmask); in lp_setup_try_clear_zs()
524 lp_setup_clear( struct lp_setup_context *setup, in lp_setup_clear() argument
540 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) { in lp_setup_clear()
541 lp_setup_flush(setup, NULL, __FUNCTION__); in lp_setup_clear()
543 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) in lp_setup_clear()
550 for (i = 0; i < setup->fb.nr_cbufs; i++) { in lp_setup_clear()
551 if ((flags & (1 << (2 + i))) && setup->fb.cbufs[i]) { in lp_setup_clear()
552 if (!lp_setup_try_clear_color_buffer(setup, color, i)) { in lp_setup_clear()
553 lp_setup_flush(setup, NULL, __FUNCTION__); in lp_setup_clear()
555 if (!lp_setup_try_clear_color_buffer(setup, color, i)) in lp_setup_clear()
566 lp_setup_set_triangle_state( struct lp_setup_context *setup, in lp_setup_set_triangle_state() argument
576 setup->ccw_is_frontface = ccw_is_frontface; in lp_setup_set_triangle_state()
577 setup->cullmode = cull_mode; in lp_setup_set_triangle_state()
578 setup->triangle = first_triangle; in lp_setup_set_triangle_state()
579 setup->multisample = multisample; in lp_setup_set_triangle_state()
580 setup->pixel_offset = half_pixel_center ? 0.5f : 0.0f; in lp_setup_set_triangle_state()
581 setup->bottom_edge_rule = bottom_edge_rule; in lp_setup_set_triangle_state()
583 if (setup->scissor_test != scissor) { in lp_setup_set_triangle_state()
584 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_set_triangle_state()
585 setup->scissor_test = scissor; in lp_setup_set_triangle_state()
590 lp_setup_set_line_state( struct lp_setup_context *setup, in lp_setup_set_line_state() argument
595 setup->line_width = line_width; in lp_setup_set_line_state()
599 lp_setup_set_point_state( struct lp_setup_context *setup, in lp_setup_set_point_state() argument
607 setup->point_size = point_size; in lp_setup_set_point_state()
608 setup->sprite_coord_enable = sprite_coord_enable; in lp_setup_set_point_state()
609 setup->sprite_coord_origin = sprite_coord_origin; in lp_setup_set_point_state()
610 setup->point_size_per_vertex = point_size_per_vertex; in lp_setup_set_point_state()
614 lp_setup_set_setup_variant( struct lp_setup_context *setup, in lp_setup_set_setup_variant() argument
619 setup->setup.variant = variant; in lp_setup_set_setup_variant()
623 lp_setup_set_fs_variant( struct lp_setup_context *setup, in lp_setup_set_fs_variant() argument
629 setup->fs.current.variant = variant; in lp_setup_set_fs_variant()
630 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fs_variant()
634 lp_setup_set_fs_constants(struct lp_setup_context *setup, in lp_setup_set_fs_constants() argument
642 assert(num <= ARRAY_SIZE(setup->constants)); in lp_setup_set_fs_constants()
645 util_copy_constant_buffer(&setup->constants[i].current, &buffers[i]); in lp_setup_set_fs_constants()
647 for (; i < ARRAY_SIZE(setup->constants); i++) { in lp_setup_set_fs_constants()
648 util_copy_constant_buffer(&setup->constants[i].current, NULL); in lp_setup_set_fs_constants()
650 setup->dirty |= LP_SETUP_NEW_CONSTANTS; in lp_setup_set_fs_constants()
654 lp_setup_set_fs_ssbos(struct lp_setup_context *setup, in lp_setup_set_fs_ssbos() argument
662 assert(num <= ARRAY_SIZE(setup->ssbos)); in lp_setup_set_fs_ssbos()
665 util_copy_shader_buffer(&setup->ssbos[i].current, &buffers[i]); in lp_setup_set_fs_ssbos()
667 for (; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_set_fs_ssbos()
668 util_copy_shader_buffer(&setup->ssbos[i].current, NULL); in lp_setup_set_fs_ssbos()
670 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()
692 jit_image = &setup->fs.current.jit_context.images[i]; in lp_setup_set_fs_images()
696 /* regular texture - setup array of mipmap level offsets */ in lp_setup_set_fs_images()
741 for (; i < ARRAY_SIZE(setup->images); i++) { in lp_setup_set_fs_images()
742 util_copy_image_view(&setup->images[i].current, NULL); in lp_setup_set_fs_images()
744 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fs_images()
748 lp_setup_set_alpha_ref_value( struct lp_setup_context *setup, in lp_setup_set_alpha_ref_value() argument
753 if(setup->fs.current.jit_context.alpha_ref_value != alpha_ref_value) { in lp_setup_set_alpha_ref_value()
754 setup->fs.current.jit_context.alpha_ref_value = alpha_ref_value; in lp_setup_set_alpha_ref_value()
755 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_alpha_ref_value()
760 lp_setup_set_stencil_ref_values( struct lp_setup_context *setup, in lp_setup_set_stencil_ref_values() argument
765 if (setup->fs.current.jit_context.stencil_ref_front != refs[0] || in lp_setup_set_stencil_ref_values()
766 setup->fs.current.jit_context.stencil_ref_back != refs[1]) { in lp_setup_set_stencil_ref_values()
767 setup->fs.current.jit_context.stencil_ref_front = refs[0]; in lp_setup_set_stencil_ref_values()
768 setup->fs.current.jit_context.stencil_ref_back = refs[1]; in lp_setup_set_stencil_ref_values()
769 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_stencil_ref_values()
774 lp_setup_set_blend_color( struct lp_setup_context *setup, in lp_setup_set_blend_color() argument
781 if(memcmp(&setup->blend_color.current, blend_color, sizeof *blend_color) != 0) { in lp_setup_set_blend_color()
782 memcpy(&setup->blend_color.current, blend_color, sizeof *blend_color); in lp_setup_set_blend_color()
783 setup->dirty |= LP_SETUP_NEW_BLEND_COLOR; in lp_setup_set_blend_color()
789 lp_setup_set_scissors( struct lp_setup_context *setup, in lp_setup_set_scissors() argument
798 setup->scissors[i].x0 = scissors[i].minx; in lp_setup_set_scissors()
799 setup->scissors[i].x1 = scissors[i].maxx-1; in lp_setup_set_scissors()
800 setup->scissors[i].y0 = scissors[i].miny; in lp_setup_set_scissors()
801 setup->scissors[i].y1 = scissors[i].maxy-1; in lp_setup_set_scissors()
803 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_set_scissors()
807 lp_setup_set_sample_mask(struct lp_setup_context *setup, in lp_setup_set_sample_mask() argument
810 if (setup->fs.current.jit_context.sample_mask != sample_mask) { in lp_setup_set_sample_mask()
811 setup->fs.current.jit_context.sample_mask = sample_mask; in lp_setup_set_sample_mask()
812 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_sample_mask()
817 lp_setup_set_flatshade_first(struct lp_setup_context *setup, in lp_setup_set_flatshade_first() argument
820 setup->flatshade_first = flatshade_first; in lp_setup_set_flatshade_first()
824 lp_setup_set_rasterizer_discard(struct lp_setup_context *setup, in lp_setup_set_rasterizer_discard() argument
827 if (setup->rasterizer_discard != rasterizer_discard) { in lp_setup_set_rasterizer_discard()
828 setup->rasterizer_discard = rasterizer_discard; in lp_setup_set_rasterizer_discard()
829 setup->line = first_line; in lp_setup_set_rasterizer_discard()
830 setup->point = first_point; in lp_setup_set_rasterizer_discard()
831 setup->triangle = first_triangle; in lp_setup_set_rasterizer_discard()
836 lp_setup_set_vertex_info(struct lp_setup_context *setup, in lp_setup_set_vertex_info() argument
841 setup->vertex_info = vertex_info; in lp_setup_set_vertex_info()
849 lp_setup_set_viewports(struct lp_setup_context *setup, in lp_setup_set_viewports() argument
853 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe); in lp_setup_set_viewports()
870 if (setup->viewports[i].min_depth != min_depth || in lp_setup_set_viewports()
871 setup->viewports[i].max_depth != max_depth) { in lp_setup_set_viewports()
872 setup->viewports[i].min_depth = min_depth; in lp_setup_set_viewports()
873 setup->viewports[i].max_depth = max_depth; in lp_setup_set_viewports()
874 setup->dirty |= LP_SETUP_NEW_VIEWPORTS; in lp_setup_set_viewports()
884 lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup, in lp_setup_set_fragment_sampler_views() argument
894 max_tex_num = MAX2(num, setup->fs.current_tex_num); in lp_setup_set_fragment_sampler_views()
903 jit_tex = &setup->fs.current.jit_context.textures[i]; in lp_setup_set_fragment_sampler_views()
908 pipe_resource_reference(&setup->fs.current_tex[i], res); in lp_setup_set_fragment_sampler_views()
911 /* regular texture - setup array of mipmap level offsets */ in lp_setup_set_fragment_sampler_views()
1023 pipe_resource_reference(&setup->fs.current_tex[i], NULL); in lp_setup_set_fragment_sampler_views()
1026 setup->fs.current_tex_num = num; in lp_setup_set_fragment_sampler_views()
1028 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fragment_sampler_views()
1036 lp_setup_set_fragment_sampler_state(struct lp_setup_context *setup, in lp_setup_set_fragment_sampler_state() argument
1051 jit_sam = &setup->fs.current.jit_context.samplers[i]; in lp_setup_set_fragment_sampler_state()
1060 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fragment_sampler_state()
1070 lp_setup_is_resource_referenced( const struct lp_setup_context *setup, in lp_setup_is_resource_referenced() argument
1076 for (i = 0; i < setup->fb.nr_cbufs; i++) { in lp_setup_is_resource_referenced()
1077 if (setup->fb.cbufs[i] && setup->fb.cbufs[i]->texture == texture) in lp_setup_is_resource_referenced()
1080 if (setup->fb.zsbuf && setup->fb.zsbuf->texture == texture) { in lp_setup_is_resource_referenced()
1085 for (i = 0; i < ARRAY_SIZE(setup->scenes); i++) { in lp_setup_is_resource_referenced()
1086 if (lp_scene_is_resource_referenced(setup->scenes[i], texture)) { in lp_setup_is_resource_referenced()
1091 for (i = 0; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_is_resource_referenced()
1092 if (setup->ssbos[i].current.buffer == texture) in lp_setup_is_resource_referenced()
1096 for (i = 0; i < ARRAY_SIZE(setup->images); i++) { in lp_setup_is_resource_referenced()
1097 if (setup->images[i].current.resource == texture) in lp_setup_is_resource_referenced()
1118 try_update_scene_state( struct lp_setup_context *setup ) in try_update_scene_state() argument
1121 boolean new_scene = (setup->fs.stored == NULL); in try_update_scene_state()
1122 struct lp_scene *scene = setup->scene; in try_update_scene_state()
1127 if (setup->dirty & LP_SETUP_NEW_VIEWPORTS) { in try_update_scene_state()
1137 lp_scene_alloc(scene, sizeof setup->viewports); in try_update_scene_state()
1144 memcpy(stored, setup->viewports, sizeof setup->viewports); in try_update_scene_state()
1146 setup->fs.current.jit_context.viewports = stored; in try_update_scene_state()
1147 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1150 if(setup->dirty & LP_SETUP_NEW_BLEND_COLOR) { in try_update_scene_state()
1169 fstored[i] = setup->blend_color.current.color[i % 4]; in try_update_scene_state()
1174 uint8_t c = float_to_ubyte(setup->blend_color.current.color[i]); in try_update_scene_state()
1179 setup->blend_color.stored = stored; in try_update_scene_state()
1180 setup->fs.current.jit_context.u8_blend_color = stored; in try_update_scene_state()
1181 setup->fs.current.jit_context.f_blend_color = fstored; in try_update_scene_state()
1182 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1185 if (setup->dirty & LP_SETUP_NEW_CONSTANTS) { in try_update_scene_state()
1186 for (i = 0; i < ARRAY_SIZE(setup->constants); ++i) { in try_update_scene_state()
1187 struct pipe_resource *buffer = setup->constants[i].current.buffer; in try_update_scene_state()
1188 const unsigned current_size = MIN2(setup->constants[i].current.buffer_size, in try_update_scene_state()
1199 else if (setup->constants[i].current.user_buffer) { in try_update_scene_state()
1201 current_data = (ubyte *) setup->constants[i].current.user_buffer; in try_update_scene_state()
1205 current_data += setup->constants[i].current.buffer_offset; in try_update_scene_state()
1209 if (setup->constants[i].stored_size != current_size || in try_update_scene_state()
1210 !setup->constants[i].stored_data || in try_update_scene_state()
1211 memcmp(setup->constants[i].stored_data, in try_update_scene_state()
1225 setup->constants[i].stored_size = current_size; in try_update_scene_state()
1226 setup->constants[i].stored_data = stored; in try_update_scene_state()
1228 setup->fs.current.jit_context.constants[i] = in try_update_scene_state()
1229 setup->constants[i].stored_data; in try_update_scene_state()
1232 setup->constants[i].stored_size = 0; in try_update_scene_state()
1233 setup->constants[i].stored_data = NULL; in try_update_scene_state()
1234 setup->fs.current.jit_context.constants[i] = fake_const_buf; in try_update_scene_state()
1238 … DIV_ROUND_UP(setup->constants[i].stored_size, lp_get_constant_buffer_stride(scene->pipe->screen)); in try_update_scene_state()
1239 setup->fs.current.jit_context.num_constants[i] = num_constants; in try_update_scene_state()
1240 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1244 if (setup->dirty & LP_SETUP_NEW_SSBOS) { in try_update_scene_state()
1245 for (i = 0; i < ARRAY_SIZE(setup->ssbos); ++i) { in try_update_scene_state()
1246 struct pipe_resource *buffer = setup->ssbos[i].current.buffer; in try_update_scene_state()
1254 current_data += setup->ssbos[i].current.buffer_offset; in try_update_scene_state()
1256 setup->fs.current.jit_context.ssbos[i] = (const uint32_t *)current_data; in try_update_scene_state()
1257 setup->fs.current.jit_context.num_ssbos[i] = setup->ssbos[i].current.buffer_size; in try_update_scene_state()
1259 setup->fs.current.jit_context.ssbos[i] = NULL; in try_update_scene_state()
1260 setup->fs.current.jit_context.num_ssbos[i] = 0; in try_update_scene_state()
1262 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1265 if (setup->dirty & LP_SETUP_NEW_FS) { in try_update_scene_state()
1266 if (!setup->fs.stored || in try_update_scene_state()
1267 memcmp(setup->fs.stored, in try_update_scene_state()
1268 &setup->fs.current, in try_update_scene_state()
1269 sizeof setup->fs.current) != 0) in try_update_scene_state()
1275 * and append it to the bin's setup data buffer. in try_update_scene_state()
1284 &setup->fs.current.jit_context, in try_update_scene_state()
1285 sizeof setup->fs.current.jit_context); in try_update_scene_state()
1286 stored->variant = setup->fs.current.variant; in try_update_scene_state()
1289 setup->fs.current.variant)) in try_update_scene_state()
1291 setup->fs.stored = stored; in try_update_scene_state()
1296 for (i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) { in try_update_scene_state()
1297 if (setup->fs.current_tex[i]) { in try_update_scene_state()
1299 setup->fs.current_tex[i], in try_update_scene_state()
1309 if (setup->dirty & LP_SETUP_NEW_SCISSOR) { in try_update_scene_state()
1312 setup->draw_regions[i] = setup->framebuffer; in try_update_scene_state()
1313 if (setup->scissor_test) { in try_update_scene_state()
1314 u_rect_possible_intersection(&setup->scissors[i], in try_update_scene_state()
1315 &setup->draw_regions[i]); in try_update_scene_state()
1320 setup->dirty = 0; in try_update_scene_state()
1322 assert(setup->fs.stored); in try_update_scene_state()
1327 lp_setup_update_state( struct lp_setup_context *setup, in lp_setup_update_state() argument
1334 * setup code. This may get refactored/changed... in lp_setup_update_state()
1337 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe); in lp_setup_update_state()
1342 if (lp->setup->dirty) { in lp_setup_update_state()
1346 assert(setup->setup.variant); in lp_setup_update_state()
1351 setup->psize_slot = lp->psize_slot; in lp_setup_update_state()
1352 setup->viewport_index_slot = lp->viewport_index_slot; in lp_setup_update_state()
1353 setup->layer_slot = lp->layer_slot; in lp_setup_update_state()
1354 setup->face_slot = lp->face_slot; in lp_setup_update_state()
1359 setup->setup.variant->key.size); in lp_setup_update_state()
1362 &setup->setup.variant->key, in lp_setup_update_state()
1363 setup->setup.variant->key.size) == 0); in lp_setup_update_state()
1366 if (update_scene && setup->state != SETUP_ACTIVE) { in lp_setup_update_state()
1367 if (!set_scene_state( setup, SETUP_ACTIVE, __FUNCTION__ )) in lp_setup_update_state()
1374 if (update_scene && setup->scene) { in lp_setup_update_state()
1375 assert(setup->state == SETUP_ACTIVE); in lp_setup_update_state()
1377 if (try_update_scene_state(setup)) in lp_setup_update_state()
1385 if (!set_scene_state(setup, SETUP_FLUSHED, __FUNCTION__)) in lp_setup_update_state()
1388 if (!set_scene_state(setup, SETUP_ACTIVE, __FUNCTION__)) in lp_setup_update_state()
1391 if (!setup->scene) in lp_setup_update_state()
1394 return try_update_scene_state(setup); in lp_setup_update_state()
1405 lp_setup_destroy( struct lp_setup_context *setup ) in lp_setup_destroy() argument
1409 lp_setup_reset( setup ); in lp_setup_destroy()
1411 util_unreference_framebuffer_state(&setup->fb); in lp_setup_destroy()
1413 for (i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) { in lp_setup_destroy()
1414 pipe_resource_reference(&setup->fs.current_tex[i], NULL); in lp_setup_destroy()
1417 for (i = 0; i < ARRAY_SIZE(setup->constants); i++) { in lp_setup_destroy()
1418 pipe_resource_reference(&setup->constants[i].current.buffer, NULL); in lp_setup_destroy()
1421 for (i = 0; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_destroy()
1422 pipe_resource_reference(&setup->ssbos[i].current.buffer, NULL); in lp_setup_destroy()
1426 for (i = 0; i < ARRAY_SIZE(setup->scenes); i++) { in lp_setup_destroy()
1427 struct lp_scene *scene = setup->scenes[i]; in lp_setup_destroy()
1435 lp_fence_reference(&setup->last_fence, NULL); in lp_setup_destroy()
1437 FREE( setup ); in lp_setup_destroy()
1451 struct lp_setup_context *setup; in lp_setup_create() local
1454 setup = CALLOC_STRUCT(lp_setup_context); in lp_setup_create()
1455 if (!setup) { in lp_setup_create()
1459 lp_setup_init_vbuf(setup); in lp_setup_create()
1463 setup->pipe = pipe; in lp_setup_create()
1466 setup->num_threads = screen->num_threads; in lp_setup_create()
1467 setup->vbuf = draw_vbuf_stage(draw, &setup->base); in lp_setup_create()
1468 if (!setup->vbuf) { in lp_setup_create()
1472 draw_set_rasterize_stage(draw, setup->vbuf); in lp_setup_create()
1473 draw_set_render(draw, &setup->base); in lp_setup_create()
1477 setup->scenes[i] = lp_scene_create( pipe ); in lp_setup_create()
1478 if (!setup->scenes[i]) { in lp_setup_create()
1483 setup->triangle = first_triangle; in lp_setup_create()
1484 setup->line = first_line; in lp_setup_create()
1485 setup->point = first_point; in lp_setup_create()
1487 setup->dirty = ~0; in lp_setup_create()
1490 setup->framebuffer.x1 = -1; in lp_setup_create()
1491 setup->framebuffer.y1 = -1; in lp_setup_create()
1493 return setup; in lp_setup_create()
1497 if (setup->scenes[i]) { in lp_setup_create()
1498 lp_scene_destroy(setup->scenes[i]); in lp_setup_create()
1502 setup->vbuf->destroy(setup->vbuf); in lp_setup_create()
1504 FREE(setup); in lp_setup_create()
1514 lp_setup_begin_query(struct lp_setup_context *setup, in lp_setup_begin_query() argument
1518 set_scene_state(setup, SETUP_ACTIVE, "begin_query"); in lp_setup_begin_query()
1527 assert(setup->active_binned_queries < LP_MAX_ACTIVE_BINNED_QUERIES); in lp_setup_begin_query()
1529 if (setup->active_binned_queries >= LP_MAX_ACTIVE_BINNED_QUERIES) { in lp_setup_begin_query()
1532 assert(setup->active_queries[setup->active_binned_queries] == NULL); in lp_setup_begin_query()
1533 setup->active_queries[setup->active_binned_queries] = pq; in lp_setup_begin_query()
1534 setup->active_binned_queries++; in lp_setup_begin_query()
1536 assert(setup->scene); in lp_setup_begin_query()
1537 if (setup->scene) { in lp_setup_begin_query()
1538 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_begin_query()
1542 if (!lp_setup_flush_and_restart(setup)) in lp_setup_begin_query()
1545 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_begin_query()
1551 setup->scene->had_queries |= TRUE; in lp_setup_begin_query()
1560 lp_setup_end_query(struct lp_setup_context *setup, struct llvmpipe_query *pq) in lp_setup_end_query() argument
1562 set_scene_state(setup, SETUP_ACTIVE, "end_query"); in lp_setup_end_query()
1564 assert(setup->scene); in lp_setup_end_query()
1565 if (setup->scene) { in lp_setup_end_query()
1569 lp_fence_reference(&pq->fence, setup->scene->fence); in lp_setup_end_query()
1577 !(setup->scene->tiles_x | setup->scene->tiles_y)) { in lp_setup_end_query()
1585 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_end_query()
1588 if (!lp_setup_flush_and_restart(setup)) in lp_setup_end_query()
1591 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_end_query()
1597 setup->scene->had_queries |= TRUE; in lp_setup_end_query()
1601 lp_fence_reference(&pq->fence, setup->last_fence); in lp_setup_end_query()
1615 for (i = 0; i < setup->active_binned_queries; i++) { in lp_setup_end_query()
1616 if (setup->active_queries[i] == pq) in lp_setup_end_query()
1619 assert(i < setup->active_binned_queries); in lp_setup_end_query()
1620 if (i == setup->active_binned_queries) in lp_setup_end_query()
1622 setup->active_binned_queries--; in lp_setup_end_query()
1623 setup->active_queries[i] = setup->active_queries[setup->active_binned_queries]; in lp_setup_end_query()
1624 setup->active_queries[setup->active_binned_queries] = NULL; in lp_setup_end_query()
1630 lp_setup_flush_and_restart(struct lp_setup_context *setup) in lp_setup_flush_and_restart() argument
1634 assert(setup->state == SETUP_ACTIVE); in lp_setup_flush_and_restart()
1636 if (!set_scene_state(setup, SETUP_FLUSHED, __FUNCTION__)) in lp_setup_flush_and_restart()
1639 if (!lp_setup_update_state(setup, TRUE)) in lp_setup_flush_and_restart()