• Home
  • Raw
  • Download

Lines Matching full:setup

66 static boolean try_update_scene_state( struct lp_setup_context *setup );
70 lp_setup_get_empty_scene(struct lp_setup_context *setup) in lp_setup_get_empty_scene() argument
72 assert(setup->scene == NULL); in lp_setup_get_empty_scene()
74 setup->scene_idx++; in lp_setup_get_empty_scene()
75 setup->scene_idx %= ARRAY_SIZE(setup->scenes); in lp_setup_get_empty_scene()
77 setup->scene = setup->scenes[setup->scene_idx]; in lp_setup_get_empty_scene()
79 if (setup->scene->fence) { in lp_setup_get_empty_scene()
82 __FUNCTION__, setup->scene->fence->id); in lp_setup_get_empty_scene()
84 lp_fence_wait(setup->scene->fence); in lp_setup_get_empty_scene()
87 lp_scene_begin_binning(setup->scene, &setup->fb); in lp_setup_get_empty_scene()
89 setup->scene->permit_linear_rasterizer = setup->permit_linear_rasterizer; in lp_setup_get_empty_scene()
94 first_triangle( struct lp_setup_context *setup, in first_triangle() argument
99 assert(setup->state == SETUP_ACTIVE); in first_triangle()
100 lp_setup_choose_triangle( setup ); in first_triangle()
101 setup->triangle( setup, v0, v1, v2 ); in first_triangle()
105 first_rectangle( struct lp_setup_context *setup, in first_rectangle() argument
113 assert(setup->state == SETUP_ACTIVE); in first_rectangle()
114 lp_setup_choose_rect( setup ); in first_rectangle()
115 return setup->rect( setup, v0, v1, v2, v3, v4, v5 ); in first_rectangle()
119 first_line( struct lp_setup_context *setup, in first_line() argument
123 assert(setup->state == SETUP_ACTIVE); in first_line()
124 lp_setup_choose_line( setup ); in first_line()
125 setup->line( setup, v0, v1 ); in first_line()
129 first_point( struct lp_setup_context *setup, in first_point() argument
132 assert(setup->state == SETUP_ACTIVE); in first_point()
133 lp_setup_choose_point( setup ); in first_point()
134 setup->point( setup, v0 ); in first_point()
138 lp_setup_reset( struct lp_setup_context *setup ) in lp_setup_reset() argument
145 for (i = 0; i < ARRAY_SIZE(setup->constants); ++i) { in lp_setup_reset()
146 setup->constants[i].stored_size = 0; in lp_setup_reset()
147 setup->constants[i].stored_data = NULL; in lp_setup_reset()
150 setup->fs.stored = NULL; in lp_setup_reset()
151 setup->dirty = ~0; in lp_setup_reset()
154 setup->scene = NULL; in lp_setup_reset()
158 memset(&setup->clear, 0, sizeof setup->clear); in lp_setup_reset()
163 setup->line = first_line; in lp_setup_reset()
164 setup->point = first_point; in lp_setup_reset()
165 setup->triangle = first_triangle; in lp_setup_reset()
166 setup->rect = first_rectangle; in lp_setup_reset()
172 lp_setup_rasterize_scene( struct lp_setup_context *setup ) in lp_setup_rasterize_scene() argument
174 struct lp_scene *scene = setup->scene; in lp_setup_rasterize_scene()
177 scene->num_active_queries = setup->active_binned_queries; in lp_setup_rasterize_scene()
178 memcpy(scene->active_queries, setup->active_queries, in lp_setup_rasterize_scene()
183 lp_fence_reference(&setup->last_fence, scene->fence); in lp_setup_rasterize_scene()
185 if (setup->last_fence) in lp_setup_rasterize_scene()
186 setup->last_fence->issued = TRUE; in lp_setup_rasterize_scene()
193 * multiple scenes per setup is about - when we get a new empty scene in lp_setup_rasterize_scene()
204 lp_scene_end_rasterization(setup->scene); in lp_setup_rasterize_scene()
205 lp_setup_reset( setup ); in lp_setup_rasterize_scene()
213 begin_binning( struct lp_setup_context *setup ) in begin_binning() argument
215 struct lp_scene *scene = setup->scene; in begin_binning()
224 scene->fence = lp_fence_create(MAX2(1, setup->num_threads)); in begin_binning()
228 ok = try_update_scene_state(setup); in begin_binning()
232 if (setup->fb.zsbuf && in begin_binning()
233 ((setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) != PIPE_CLEAR_DEPTHSTENCIL) && in begin_binning()
234 util_format_is_depth_and_stencil(setup->fb.zsbuf->format)) in begin_binning()
238 setup->clear.flags >> 2, in begin_binning()
241 if (setup->clear.flags & PIPE_CLEAR_COLOR) { in begin_binning()
243 for (cbuf = 0; cbuf < setup->fb.nr_cbufs; cbuf++) { in begin_binning()
245 if (setup->clear.flags & (1 << (2 + cbuf))) { in begin_binning()
256 cc_scene->color_val = setup->clear.color_val[cbuf]; in begin_binning()
267 if (setup->fb.zsbuf) { in begin_binning()
268 if (setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) { in begin_binning()
272 setup->clear.zsvalue, in begin_binning()
273 setup->clear.zsmask)); in begin_binning()
279 setup->clear.flags = 0; in begin_binning()
280 setup->clear.zsmask = 0; in begin_binning()
281 setup->clear.zsvalue = 0; in begin_binning()
283 scene->had_queries = !!setup->active_binned_queries; in begin_binning()
296 execute_clears( struct lp_setup_context *setup ) in execute_clears() argument
300 return begin_binning( setup ); in execute_clears()
311 set_scene_state( struct lp_setup_context *setup, in set_scene_state() argument
315 unsigned old_state = setup->state; in set_scene_state()
328 if (new_state == SETUP_FLUSHED && setup->scene) in set_scene_state()
329 lp_debug_draw_bins_by_cmd_length(setup->scene); in set_scene_state()
335 lp_setup_get_empty_scene(setup); in set_scene_state()
342 if (!begin_binning( setup )) in set_scene_state()
348 if (!execute_clears( setup )) in set_scene_state()
351 lp_setup_rasterize_scene( setup ); in set_scene_state()
352 assert(setup->scene == NULL); in set_scene_state()
356 assert(0 && "invalid setup state mode"); in set_scene_state()
360 setup->state = new_state; in set_scene_state()
364 if (setup->scene) { in set_scene_state()
365 lp_scene_end_rasterization(setup->scene); in set_scene_state()
366 setup->scene = NULL; in set_scene_state()
369 setup->state = SETUP_FLUSHED; in set_scene_state()
370 lp_setup_reset( setup ); in set_scene_state()
376 lp_setup_flush( struct lp_setup_context *setup, in lp_setup_flush() argument
380 set_scene_state( setup, SETUP_FLUSHED, reason ); in lp_setup_flush()
383 lp_fence_reference((struct lp_fence **)fence, setup->last_fence); 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, __FUNCTION__ ); 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->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_bind_framebuffer()
422 lp_setup_try_clear_color_buffer(struct lp_setup_context *setup, in lp_setup_try_clear_color_buffer() argument
428 enum pipe_format format = setup->fb.cbufs[cbuf]->format; in lp_setup_try_clear_color_buffer()
430 LP_DBG(DEBUG_SETUP, "%s state %d\n", __FUNCTION__, setup->state); in lp_setup_try_clear_color_buffer()
434 if (setup->state == SETUP_ACTIVE) { in lp_setup_try_clear_color_buffer()
435 struct lp_scene *scene = setup->scene; in lp_setup_try_clear_color_buffer()
466 set_scene_state( setup, SETUP_CLEARED, __FUNCTION__ ); in lp_setup_try_clear_color_buffer()
469 setup->clear.flags |= 1 << (cbuf + 2); in lp_setup_try_clear_color_buffer()
470 setup->clear.color_val[cbuf] = uc; in lp_setup_try_clear_color_buffer()
477 lp_setup_try_clear_zs(struct lp_setup_context *setup, in lp_setup_try_clear_zs() argument
486 enum pipe_format format = setup->fb.zsbuf->format; in lp_setup_try_clear_zs()
488 LP_DBG(DEBUG_SETUP, "%s state %d\n", __FUNCTION__, setup->state); in lp_setup_try_clear_zs()
510 if (setup->state == SETUP_ACTIVE) { in lp_setup_try_clear_zs()
511 struct lp_scene *scene = setup->scene; in lp_setup_try_clear_zs()
530 set_scene_state( setup, SETUP_CLEARED, __FUNCTION__ ); in lp_setup_try_clear_zs()
532 setup->clear.flags |= flags; in lp_setup_try_clear_zs()
534 setup->clear.zsmask |= zsmask; in lp_setup_try_clear_zs()
535 setup->clear.zsvalue = in lp_setup_try_clear_zs()
536 (setup->clear.zsvalue & ~zsmask) | (zsvalue & zsmask); in lp_setup_try_clear_zs()
543 lp_setup_clear( struct lp_setup_context *setup, in lp_setup_clear() argument
559 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) { in lp_setup_clear()
560 lp_setup_flush(setup, NULL, __FUNCTION__); in lp_setup_clear()
562 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) in lp_setup_clear()
569 for (i = 0; i < setup->fb.nr_cbufs; i++) { in lp_setup_clear()
570 if ((flags & (1 << (2 + i))) && setup->fb.cbufs[i]) { in lp_setup_clear()
571 if (!lp_setup_try_clear_color_buffer(setup, color, i)) { in lp_setup_clear()
572 lp_setup_flush(setup, NULL, __FUNCTION__); in lp_setup_clear()
574 if (!lp_setup_try_clear_color_buffer(setup, color, i)) in lp_setup_clear()
585 lp_setup_set_triangle_state( struct lp_setup_context *setup, in lp_setup_set_triangle_state() argument
595 setup->ccw_is_frontface = ccw_is_frontface; in lp_setup_set_triangle_state()
596 setup->cullmode = cull_mode; in lp_setup_set_triangle_state()
597 setup->triangle = first_triangle; in lp_setup_set_triangle_state()
598 setup->rect = first_rectangle; in lp_setup_set_triangle_state()
599 setup->multisample = multisample; in lp_setup_set_triangle_state()
600 setup->pixel_offset = half_pixel_center ? 0.5f : 0.0f; in lp_setup_set_triangle_state()
601 setup->bottom_edge_rule = bottom_edge_rule; in lp_setup_set_triangle_state()
603 if (setup->scissor_test != scissor) { in lp_setup_set_triangle_state()
604 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_set_triangle_state()
605 setup->scissor_test = scissor; in lp_setup_set_triangle_state()
610 lp_setup_set_line_state( struct lp_setup_context *setup, in lp_setup_set_line_state() argument
616 setup->line_width = line_width; in lp_setup_set_line_state()
617 setup->rectangular_lines = line_rectangular; in lp_setup_set_line_state()
621 lp_setup_set_point_state( struct lp_setup_context *setup, in lp_setup_set_point_state() argument
631 setup->point_size = point_size; in lp_setup_set_point_state()
632 setup->sprite_coord_enable = sprite_coord_enable; in lp_setup_set_point_state()
633 setup->sprite_coord_origin = sprite_coord_origin; in lp_setup_set_point_state()
634 setup->point_tri_clip = point_tri_clip; in lp_setup_set_point_state()
635 setup->point_size_per_vertex = point_size_per_vertex; in lp_setup_set_point_state()
636 setup->legacy_points = !point_quad_rasterization; in lp_setup_set_point_state()
640 lp_setup_set_setup_variant( struct lp_setup_context *setup, in lp_setup_set_setup_variant() argument
645 setup->setup.variant = variant; in lp_setup_set_setup_variant()
649 lp_setup_set_fs_variant( struct lp_setup_context *setup, in lp_setup_set_fs_variant() argument
655 setup->fs.current.variant = variant; in lp_setup_set_fs_variant()
656 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fs_variant()
660 lp_setup_set_fs_constants(struct lp_setup_context *setup, in lp_setup_set_fs_constants() argument
668 assert(num <= ARRAY_SIZE(setup->constants)); in lp_setup_set_fs_constants()
671 util_copy_constant_buffer(&setup->constants[i].current, &buffers[i], false); in lp_setup_set_fs_constants()
673 for (; i < ARRAY_SIZE(setup->constants); i++) { in lp_setup_set_fs_constants()
674 util_copy_constant_buffer(&setup->constants[i].current, NULL, false); in lp_setup_set_fs_constants()
676 setup->dirty |= LP_SETUP_NEW_CONSTANTS; in lp_setup_set_fs_constants()
680 lp_setup_set_fs_ssbos(struct lp_setup_context *setup, in lp_setup_set_fs_ssbos() argument
688 assert(num <= ARRAY_SIZE(setup->ssbos)); in lp_setup_set_fs_ssbos()
691 util_copy_shader_buffer(&setup->ssbos[i].current, &buffers[i]); in lp_setup_set_fs_ssbos()
693 for (; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_set_fs_ssbos()
694 util_copy_shader_buffer(&setup->ssbos[i].current, NULL); in lp_setup_set_fs_ssbos()
696 setup->dirty |= LP_SETUP_NEW_SSBOS; in lp_setup_set_fs_ssbos()
700 lp_setup_set_fs_images(struct lp_setup_context *setup, in lp_setup_set_fs_images() argument
708 assert(num <= ARRAY_SIZE(setup->images)); in lp_setup_set_fs_images()
712 util_copy_image_view(&setup->images[i].current, &images[i]); in lp_setup_set_fs_images()
718 jit_image = &setup->fs.current.jit_context.images[i]; in lp_setup_set_fs_images()
722 /* regular texture - setup array of mipmap level offsets */ in lp_setup_set_fs_images()
771 for (; i < ARRAY_SIZE(setup->images); i++) { in lp_setup_set_fs_images()
772 util_copy_image_view(&setup->images[i].current, NULL); in lp_setup_set_fs_images()
774 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fs_images()
778 lp_setup_set_alpha_ref_value( struct lp_setup_context *setup, in lp_setup_set_alpha_ref_value() argument
783 if(setup->fs.current.jit_context.alpha_ref_value != alpha_ref_value) { in lp_setup_set_alpha_ref_value()
784 setup->fs.current.jit_context.alpha_ref_value = alpha_ref_value; in lp_setup_set_alpha_ref_value()
785 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_alpha_ref_value()
790 lp_setup_set_stencil_ref_values( struct lp_setup_context *setup, in lp_setup_set_stencil_ref_values() argument
795 if (setup->fs.current.jit_context.stencil_ref_front != refs[0] || in lp_setup_set_stencil_ref_values()
796 setup->fs.current.jit_context.stencil_ref_back != refs[1]) { in lp_setup_set_stencil_ref_values()
797 setup->fs.current.jit_context.stencil_ref_front = refs[0]; in lp_setup_set_stencil_ref_values()
798 setup->fs.current.jit_context.stencil_ref_back = refs[1]; in lp_setup_set_stencil_ref_values()
799 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_stencil_ref_values()
804 lp_setup_set_blend_color( struct lp_setup_context *setup, in lp_setup_set_blend_color() argument
811 if(memcmp(&setup->blend_color.current, blend_color, sizeof *blend_color) != 0) { in lp_setup_set_blend_color()
812 memcpy(&setup->blend_color.current, blend_color, sizeof *blend_color); in lp_setup_set_blend_color()
813 setup->dirty |= LP_SETUP_NEW_BLEND_COLOR; in lp_setup_set_blend_color()
819 lp_setup_set_scissors( struct lp_setup_context *setup, in lp_setup_set_scissors() argument
828 setup->scissors[i].x0 = scissors[i].minx; in lp_setup_set_scissors()
829 setup->scissors[i].x1 = scissors[i].maxx-1; in lp_setup_set_scissors()
830 setup->scissors[i].y0 = scissors[i].miny; in lp_setup_set_scissors()
831 setup->scissors[i].y1 = scissors[i].maxy-1; in lp_setup_set_scissors()
833 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_set_scissors()
837 lp_setup_set_sample_mask(struct lp_setup_context *setup, in lp_setup_set_sample_mask() argument
840 if (setup->fs.current.jit_context.sample_mask != sample_mask) { in lp_setup_set_sample_mask()
841 setup->fs.current.jit_context.sample_mask = sample_mask; in lp_setup_set_sample_mask()
842 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_sample_mask()
847 lp_setup_set_flatshade_first(struct lp_setup_context *setup, in lp_setup_set_flatshade_first() argument
850 setup->flatshade_first = flatshade_first; in lp_setup_set_flatshade_first()
854 lp_setup_set_rasterizer_discard(struct lp_setup_context *setup, in lp_setup_set_rasterizer_discard() argument
857 if (setup->rasterizer_discard != rasterizer_discard) { in lp_setup_set_rasterizer_discard()
858 setup->rasterizer_discard = rasterizer_discard; in lp_setup_set_rasterizer_discard()
859 setup->line = first_line; in lp_setup_set_rasterizer_discard()
860 setup->point = first_point; in lp_setup_set_rasterizer_discard()
861 setup->triangle = first_triangle; in lp_setup_set_rasterizer_discard()
862 setup->rect = first_rectangle; in lp_setup_set_rasterizer_discard()
867 lp_setup_set_vertex_info(struct lp_setup_context *setup, in lp_setup_set_vertex_info() argument
872 setup->vertex_info = vertex_info; in lp_setup_set_vertex_info()
877 lp_setup_set_linear_mode( struct lp_setup_context *setup, in lp_setup_set_linear_mode() argument
886 setup->permit_linear_rasterizer = (mode && in lp_setup_set_linear_mode()
889 setup->permit_linear_rasterizer = FALSE; in lp_setup_set_linear_mode()
898 lp_setup_set_viewports(struct lp_setup_context *setup, in lp_setup_set_viewports() argument
902 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe); in lp_setup_set_viewports()
925 setup->vpwh.x0 = (int)(x0 + 0.5f); in lp_setup_set_viewports()
926 setup->vpwh.x1 = (int)(viewports[0].scale[0] * 2.0f + x0 - 0.5f); in lp_setup_set_viewports()
927 setup->vpwh.y0 = (int)(y0 + 0.5f); in lp_setup_set_viewports()
928 setup->vpwh.y1 = (int)(half_height * 2.0f + y0 - 0.5f); in lp_setup_set_viewports()
929 setup->dirty |= LP_SETUP_NEW_SCISSOR; in lp_setup_set_viewports()
940 if (setup->viewports[i].min_depth != min_depth || in lp_setup_set_viewports()
941 setup->viewports[i].max_depth != max_depth) { in lp_setup_set_viewports()
942 setup->viewports[i].min_depth = min_depth; in lp_setup_set_viewports()
943 setup->viewports[i].max_depth = max_depth; in lp_setup_set_viewports()
944 setup->dirty |= LP_SETUP_NEW_VIEWPORTS; in lp_setup_set_viewports()
954 lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup, in lp_setup_set_fragment_sampler_views() argument
964 max_tex_num = MAX2(num, setup->fs.current_tex_num); in lp_setup_set_fragment_sampler_views()
972 if (setup->fs.current_tex[i]) in lp_setup_set_fragment_sampler_views()
973 llvmpipe_resource_unmap(setup->fs.current_tex[i], 0, 0); in lp_setup_set_fragment_sampler_views()
979 jit_tex = &setup->fs.current.jit_context.textures[i]; in lp_setup_set_fragment_sampler_views()
984 pipe_resource_reference(&setup->fs.current_tex[i], res); in lp_setup_set_fragment_sampler_views()
987 /* regular texture - setup array of mipmap level offsets */ in lp_setup_set_fragment_sampler_views()
1093 pipe_resource_reference(&setup->fs.current_tex[i], NULL); in lp_setup_set_fragment_sampler_views()
1096 setup->fs.current_tex_num = num; in lp_setup_set_fragment_sampler_views()
1098 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fragment_sampler_views()
1105 lp_setup_set_fragment_sampler_state(struct lp_setup_context *setup, in lp_setup_set_fragment_sampler_state() argument
1120 jit_sam = &setup->fs.current.jit_context.samplers[i]; in lp_setup_set_fragment_sampler_state()
1130 setup->dirty |= LP_SETUP_NEW_FS; in lp_setup_set_fragment_sampler_state()
1142 lp_setup_is_resource_referenced( const struct lp_setup_context *setup, in lp_setup_is_resource_referenced() argument
1148 for (i = 0; i < setup->fb.nr_cbufs; i++) { in lp_setup_is_resource_referenced()
1149 if (setup->fb.cbufs[i] && setup->fb.cbufs[i]->texture == texture) in lp_setup_is_resource_referenced()
1152 if (setup->fb.zsbuf && setup->fb.zsbuf->texture == texture) { in lp_setup_is_resource_referenced()
1157 for (i = 0; i < ARRAY_SIZE(setup->scenes); i++) { in lp_setup_is_resource_referenced()
1158 if (lp_scene_is_resource_referenced(setup->scenes[i], texture)) { in lp_setup_is_resource_referenced()
1163 for (i = 0; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_is_resource_referenced()
1164 if (setup->ssbos[i].current.buffer == texture) in lp_setup_is_resource_referenced()
1168 for (i = 0; i < ARRAY_SIZE(setup->images); i++) { in lp_setup_is_resource_referenced()
1169 if (setup->images[i].current.resource == texture) in lp_setup_is_resource_referenced()
1190 try_update_scene_state( struct lp_setup_context *setup ) in try_update_scene_state() argument
1193 boolean new_scene = (setup->fs.stored == NULL); in try_update_scene_state()
1194 struct lp_scene *scene = setup->scene; in try_update_scene_state()
1199 if (setup->dirty & LP_SETUP_NEW_VIEWPORTS) { in try_update_scene_state()
1209 lp_scene_alloc(scene, sizeof setup->viewports); in try_update_scene_state()
1216 memcpy(stored, setup->viewports, sizeof setup->viewports); in try_update_scene_state()
1218 setup->fs.current.jit_context.viewports = stored; in try_update_scene_state()
1219 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1222 if(setup->dirty & LP_SETUP_NEW_BLEND_COLOR) { in try_update_scene_state()
1241 fstored[i] = setup->blend_color.current.color[i % 4]; in try_update_scene_state()
1246 uint8_t c = float_to_ubyte(setup->blend_color.current.color[i]); in try_update_scene_state()
1251 setup->blend_color.stored = stored; in try_update_scene_state()
1252 setup->fs.current.jit_context.u8_blend_color = stored; in try_update_scene_state()
1253 setup->fs.current.jit_context.f_blend_color = fstored; in try_update_scene_state()
1254 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1257 struct llvmpipe_context *llvmpipe = llvmpipe_context(setup->pipe); in try_update_scene_state()
1259 lp_setup_set_fs_constants(llvmpipe->setup, in try_update_scene_state()
1263 if (setup->dirty & LP_SETUP_NEW_CONSTANTS) { in try_update_scene_state()
1264 for (i = 0; i < ARRAY_SIZE(setup->constants); ++i) { in try_update_scene_state()
1265 struct pipe_resource *buffer = setup->constants[i].current.buffer; in try_update_scene_state()
1266 const unsigned current_size = MIN2(setup->constants[i].current.buffer_size, in try_update_scene_state()
1277 else if (setup->constants[i].current.user_buffer) { in try_update_scene_state()
1279 current_data = (ubyte *) setup->constants[i].current.user_buffer; in try_update_scene_state()
1283 current_data += setup->constants[i].current.buffer_offset; in try_update_scene_state()
1287 if (setup->constants[i].stored_size != current_size || in try_update_scene_state()
1288 !setup->constants[i].stored_data || in try_update_scene_state()
1289 memcmp(setup->constants[i].stored_data, in try_update_scene_state()
1303 setup->constants[i].stored_size = current_size; in try_update_scene_state()
1304 setup->constants[i].stored_data = stored; in try_update_scene_state()
1306 setup->fs.current.jit_context.constants[i] = in try_update_scene_state()
1307 setup->constants[i].stored_data; in try_update_scene_state()
1310 setup->constants[i].stored_size = 0; in try_update_scene_state()
1311 setup->constants[i].stored_data = NULL; in try_update_scene_state()
1312 setup->fs.current.jit_context.constants[i] = fake_const_buf; in try_update_scene_state()
1316 … DIV_ROUND_UP(setup->constants[i].stored_size, lp_get_constant_buffer_stride(scene->pipe->screen)); in try_update_scene_state()
1317 setup->fs.current.jit_context.num_constants[i] = num_constants; in try_update_scene_state()
1318 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1322 if (setup->dirty & LP_SETUP_NEW_SSBOS) { in try_update_scene_state()
1323 for (i = 0; i < ARRAY_SIZE(setup->ssbos); ++i) { in try_update_scene_state()
1324 struct pipe_resource *buffer = setup->ssbos[i].current.buffer; in try_update_scene_state()
1332 current_data += setup->ssbos[i].current.buffer_offset; in try_update_scene_state()
1334 setup->fs.current.jit_context.ssbos[i] = (const uint32_t *)current_data; in try_update_scene_state()
1335 setup->fs.current.jit_context.num_ssbos[i] = setup->ssbos[i].current.buffer_size; in try_update_scene_state()
1337 setup->fs.current.jit_context.ssbos[i] = NULL; in try_update_scene_state()
1338 setup->fs.current.jit_context.num_ssbos[i] = 0; in try_update_scene_state()
1340 setup->dirty |= LP_SETUP_NEW_FS; in try_update_scene_state()
1343 if (setup->dirty & LP_SETUP_NEW_FS) { in try_update_scene_state()
1344 if (!setup->fs.stored || in try_update_scene_state()
1345 memcmp(setup->fs.stored, in try_update_scene_state()
1346 &setup->fs.current, in try_update_scene_state()
1347 sizeof setup->fs.current) != 0) in try_update_scene_state()
1353 * and append it to the bin's setup data buffer. in try_update_scene_state()
1362 &setup->fs.current.jit_context, in try_update_scene_state()
1363 sizeof setup->fs.current.jit_context); in try_update_scene_state()
1365 stored->variant = setup->fs.current.variant; in try_update_scene_state()
1368 setup->fs.current.variant)) in try_update_scene_state()
1370 setup->fs.stored = stored; in try_update_scene_state()
1375 for (i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) { in try_update_scene_state()
1376 if (setup->fs.current_tex[i]) { in try_update_scene_state()
1378 setup->fs.current_tex[i], in try_update_scene_state()
1388 if (setup->dirty & LP_SETUP_NEW_SCISSOR) { in try_update_scene_state()
1392 setup->draw_regions[i] = setup->framebuffer; in try_update_scene_state()
1393 if (setup->scissor_test) { in try_update_scene_state()
1394 u_rect_possible_intersection(&setup->scissors[i], in try_update_scene_state()
1395 &setup->draw_regions[i]); in try_update_scene_state()
1398 if (setup->permit_linear_rasterizer) { in try_update_scene_state()
1400 boolean need_vp_scissoring = !!memcmp(&setup->vpwh, &setup->framebuffer, in try_update_scene_state()
1401 sizeof(setup->framebuffer)); in try_update_scene_state()
1402 assert(setup->viewport_index_slot < 0); in try_update_scene_state()
1404 u_rect_possible_intersection(&setup->vpwh, in try_update_scene_state()
1405 &setup->draw_regions[0]); in try_update_scene_state()
1408 else if (setup->point_tri_clip) { in try_update_scene_state()
1420 boolean need_vp_scissoring = !!memcmp(&setup->vpwh, &setup->framebuffer, in try_update_scene_state()
1421 sizeof(setup->framebuffer)); in try_update_scene_state()
1423 u_rect_possible_intersection(&setup->vpwh, in try_update_scene_state()
1424 &setup->draw_regions[0]); in try_update_scene_state()
1429 setup->dirty = 0; in try_update_scene_state()
1431 assert(setup->fs.stored); in try_update_scene_state()
1436 lp_setup_update_state( struct lp_setup_context *setup, in lp_setup_update_state() argument
1443 * setup code. This may get refactored/changed... in lp_setup_update_state()
1446 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe); in lp_setup_update_state()
1451 if (lp->setup->dirty) { in lp_setup_update_state()
1455 assert(setup->setup.variant); in lp_setup_update_state()
1460 setup->psize_slot = lp->psize_slot; in lp_setup_update_state()
1461 setup->viewport_index_slot = lp->viewport_index_slot; in lp_setup_update_state()
1462 setup->layer_slot = lp->layer_slot; in lp_setup_update_state()
1463 setup->face_slot = lp->face_slot; in lp_setup_update_state()
1468 setup->setup.variant->key.size); in lp_setup_update_state()
1471 &setup->setup.variant->key, in lp_setup_update_state()
1472 setup->setup.variant->key.size) == 0); in lp_setup_update_state()
1475 if (update_scene && setup->state != SETUP_ACTIVE) { in lp_setup_update_state()
1476 if (!set_scene_state( setup, SETUP_ACTIVE, __FUNCTION__ )) in lp_setup_update_state()
1483 if (update_scene && setup->scene) { in lp_setup_update_state()
1484 assert(setup->state == SETUP_ACTIVE); in lp_setup_update_state()
1486 if (try_update_scene_state(setup)) in lp_setup_update_state()
1494 if (!set_scene_state(setup, SETUP_FLUSHED, __FUNCTION__)) in lp_setup_update_state()
1497 if (!set_scene_state(setup, SETUP_ACTIVE, __FUNCTION__)) in lp_setup_update_state()
1500 if (!setup->scene) in lp_setup_update_state()
1503 return try_update_scene_state(setup); in lp_setup_update_state()
1514 lp_setup_destroy( struct lp_setup_context *setup ) in lp_setup_destroy() argument
1518 lp_setup_reset( setup ); in lp_setup_destroy()
1520 util_unreference_framebuffer_state(&setup->fb); in lp_setup_destroy()
1522 for (i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) { in lp_setup_destroy()
1523 struct pipe_resource **res_ptr = &setup->fs.current_tex[i]; in lp_setup_destroy()
1529 for (i = 0; i < ARRAY_SIZE(setup->constants); i++) { in lp_setup_destroy()
1530 pipe_resource_reference(&setup->constants[i].current.buffer, NULL); in lp_setup_destroy()
1533 for (i = 0; i < ARRAY_SIZE(setup->ssbos); i++) { in lp_setup_destroy()
1534 pipe_resource_reference(&setup->ssbos[i].current.buffer, NULL); in lp_setup_destroy()
1538 for (i = 0; i < ARRAY_SIZE(setup->scenes); i++) { in lp_setup_destroy()
1539 struct lp_scene *scene = setup->scenes[i]; in lp_setup_destroy()
1547 lp_fence_reference(&setup->last_fence, NULL); in lp_setup_destroy()
1549 FREE( setup ); in lp_setup_destroy()
1563 struct lp_setup_context *setup; in lp_setup_create() local
1566 setup = CALLOC_STRUCT(lp_setup_context); in lp_setup_create()
1567 if (!setup) { in lp_setup_create()
1571 lp_setup_init_vbuf(setup); in lp_setup_create()
1575 setup->pipe = pipe; in lp_setup_create()
1578 setup->num_threads = screen->num_threads; in lp_setup_create()
1579 setup->vbuf = draw_vbuf_stage(draw, &setup->base); in lp_setup_create()
1580 if (!setup->vbuf) { in lp_setup_create()
1584 draw_set_rasterize_stage(draw, setup->vbuf); in lp_setup_create()
1585 draw_set_render(draw, &setup->base); in lp_setup_create()
1589 setup->scenes[i] = lp_scene_create( pipe ); in lp_setup_create()
1590 if (!setup->scenes[i]) { in lp_setup_create()
1595 setup->triangle = first_triangle; in lp_setup_create()
1596 setup->line = first_line; in lp_setup_create()
1597 setup->point = first_point; in lp_setup_create()
1599 setup->dirty = ~0; in lp_setup_create()
1602 setup->framebuffer.x1 = -1; in lp_setup_create()
1603 setup->framebuffer.y1 = -1; in lp_setup_create()
1605 return setup; in lp_setup_create()
1609 if (setup->scenes[i]) { in lp_setup_create()
1610 lp_scene_destroy(setup->scenes[i]); in lp_setup_create()
1614 setup->vbuf->destroy(setup->vbuf); in lp_setup_create()
1616 FREE(setup); in lp_setup_create()
1626 lp_setup_begin_query(struct lp_setup_context *setup, in lp_setup_begin_query() argument
1629 set_scene_state(setup, SETUP_ACTIVE, "begin_query"); in lp_setup_begin_query()
1639 assert(setup->active_binned_queries < LP_MAX_ACTIVE_BINNED_QUERIES); in lp_setup_begin_query()
1641 if (setup->active_binned_queries >= LP_MAX_ACTIVE_BINNED_QUERIES) { in lp_setup_begin_query()
1644 assert(setup->active_queries[setup->active_binned_queries] == NULL); in lp_setup_begin_query()
1645 setup->active_queries[setup->active_binned_queries] = pq; in lp_setup_begin_query()
1646 setup->active_binned_queries++; in lp_setup_begin_query()
1648 assert(setup->scene); in lp_setup_begin_query()
1649 if (setup->scene) { in lp_setup_begin_query()
1650 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_begin_query()
1654 if (!lp_setup_flush_and_restart(setup)) in lp_setup_begin_query()
1657 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_begin_query()
1663 setup->scene->had_queries |= TRUE; in lp_setup_begin_query()
1672 lp_setup_end_query(struct lp_setup_context *setup, struct llvmpipe_query *pq) in lp_setup_end_query() argument
1674 set_scene_state(setup, SETUP_ACTIVE, "end_query"); in lp_setup_end_query()
1676 assert(setup->scene); in lp_setup_end_query()
1677 if (setup->scene) { in lp_setup_end_query()
1681 lp_fence_reference(&pq->fence, setup->scene->fence); in lp_setup_end_query()
1690 !(setup->scene->tiles_x | setup->scene->tiles_y)) { in lp_setup_end_query()
1698 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_end_query()
1701 if (!lp_setup_flush_and_restart(setup)) in lp_setup_end_query()
1704 if (!lp_scene_bin_everywhere(setup->scene, in lp_setup_end_query()
1710 setup->scene->had_queries |= TRUE; in lp_setup_end_query()
1714 lp_fence_reference(&pq->fence, setup->last_fence); in lp_setup_end_query()
1729 for (i = 0; i < setup->active_binned_queries; i++) { in lp_setup_end_query()
1730 if (setup->active_queries[i] == pq) in lp_setup_end_query()
1733 assert(i < setup->active_binned_queries); in lp_setup_end_query()
1734 if (i == setup->active_binned_queries) in lp_setup_end_query()
1736 setup->active_binned_queries--; in lp_setup_end_query()
1737 setup->active_queries[i] = setup->active_queries[setup->active_binned_queries]; in lp_setup_end_query()
1738 setup->active_queries[setup->active_binned_queries] = NULL; in lp_setup_end_query()
1744 lp_setup_flush_and_restart(struct lp_setup_context *setup) in lp_setup_flush_and_restart() argument
1748 assert(setup->state == SETUP_ACTIVE); in lp_setup_flush_and_restart()
1750 if (!set_scene_state(setup, SETUP_FLUSHED, __FUNCTION__)) in lp_setup_flush_and_restart()
1753 if (!lp_setup_update_state(setup, TRUE)) in lp_setup_flush_and_restart()