Lines Matching refs:setup
66 static boolean try_update_scene_state(struct lp_setup_context *setup);
70 lp_setup_wait_empty_scene(struct lp_setup_context *setup)
73 if (setup->scenes[0]->fence) {
75 __FUNCTION__, setup->scenes[0]->fence->id);
76 lp_fence_wait(setup->scenes[0]->fence);
77 lp_scene_end_rasterization(setup->scenes[0]);
84 lp_setup_get_empty_scene(struct lp_setup_context *setup)
86 assert(setup->scene == NULL);
90 for (i = 0; i < setup->num_active_scenes; i++) {
91 if (setup->scenes[i]->fence) {
92 if (lp_fence_signalled(setup->scenes[i]->fence)) {
93 lp_scene_end_rasterization(setup->scenes[i]);
101 if (setup->num_active_scenes + 1 > MAX_SCENES) {
102 i = lp_setup_wait_empty_scene(setup);
103 } else if (i == setup->num_active_scenes) {
105 struct lp_scene *scene = lp_scene_create(setup);
108 i = lp_setup_wait_empty_scene(setup);
110 LP_DBG(DEBUG_SETUP, "allocated scene: %d\n", setup->num_active_scenes);
111 setup->scenes[setup->num_active_scenes] = scene;
112 i = setup->num_active_scenes;
113 setup->num_active_scenes++;
117 setup->scene = setup->scenes[i];
118 setup->scene->permit_linear_rasterizer = setup->permit_linear_rasterizer;
119 lp_scene_begin_binning(setup->scene, &setup->fb);
124 first_triangle(struct lp_setup_context *setup,
129 assert(setup->state == SETUP_ACTIVE);
130 lp_setup_choose_triangle(setup);
131 setup->triangle(setup, v0, v1, v2);
136 first_rectangle(struct lp_setup_context *setup,
144 assert(setup->state == SETUP_ACTIVE);
145 lp_setup_choose_rect(setup);
146 return setup->rect(setup, v0, v1, v2, v3, v4, v5);
151 first_line(struct lp_setup_context *setup,
155 assert(setup->state == SETUP_ACTIVE);
156 lp_setup_choose_line(setup);
157 setup->line(setup, v0, v1);
162 first_point(struct lp_setup_context *setup,
165 assert(setup->state == SETUP_ACTIVE);
166 lp_setup_choose_point(setup);
167 setup->point(setup, v0);
172 lp_setup_reset(struct lp_setup_context *setup)
177 for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); ++i) {
178 setup->constants[i].stored_size = 0;
179 setup->constants[i].stored_data = NULL;
182 setup->fs.stored = NULL;
183 setup->dirty = ~0;
186 setup->scene = NULL;
190 memset(&setup->clear, 0, sizeof(setup->clear));
195 setup->line = first_line;
196 setup->point = first_point;
197 setup->triangle = first_triangle;
198 setup->rect = first_rectangle;
204 lp_setup_rasterize_scene(struct lp_setup_context *setup)
206 struct lp_scene *scene = setup->scene;
209 scene->num_active_queries = setup->active_binned_queries;
210 memcpy(scene->active_queries, setup->active_queries,
219 lp_setup_reset(setup);
226 begin_binning(struct lp_setup_context *setup)
228 struct lp_scene *scene = setup->scene;
235 scene->fence = lp_fence_create(MAX2(1, setup->num_threads));
239 if (!try_update_scene_state(setup)) {
244 if (setup->fb.zsbuf &&
245 ((setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) != PIPE_CLEAR_DEPTHSTENCIL) &&
246 util_format_is_depth_and_stencil(setup->fb.zsbuf->format)) {
251 setup->clear.flags >> 2,
254 if (setup->clear.flags & PIPE_CLEAR_COLOR) {
255 for (unsigned cbuf = 0; cbuf < setup->fb.nr_cbufs; cbuf++) {
257 if (setup->clear.flags & (1 << (2 + cbuf))) {
268 cc_scene->color_val = setup->clear.color_val[cbuf];
280 if (setup->fb.zsbuf) {
281 if (setup->clear.flags & PIPE_CLEAR_DEPTHSTENCIL) {
285 setup->clear.zsvalue,
286 setup->clear.zsmask))) {
292 setup->clear.flags = 0;
293 setup->clear.zsmask = 0;
294 setup->clear.zsvalue = 0;
296 scene->had_queries = !!setup->active_binned_queries;
309 execute_clears(struct lp_setup_context *setup)
313 return begin_binning(setup);
325 set_scene_state(struct lp_setup_context *setup,
329 const unsigned old_state = setup->state;
342 if (new_state == SETUP_FLUSHED && setup->scene)
343 lp_debug_draw_bins_by_cmd_length(setup->scene);
349 lp_setup_get_empty_scene(setup);
356 if (!begin_binning(setup))
362 if (!execute_clears(setup))
365 lp_setup_rasterize_scene(setup);
366 assert(setup->scene == NULL);
370 assert(0 && "invalid setup state mode");
374 setup->state = new_state;
378 if (setup->scene) {
379 lp_scene_end_rasterization(setup->scene);
380 setup->scene = NULL;
383 setup->state = SETUP_FLUSHED;
384 lp_setup_reset(setup);
390 lp_setup_flush(struct lp_setup_context *setup,
393 set_scene_state(setup, SETUP_FLUSHED, reason);
398 lp_setup_bind_framebuffer(struct lp_setup_context *setup,
405 set_scene_state(setup, SETUP_FLUSHED, __FUNCTION__);
410 assert(!setup->scene);
415 util_copy_framebuffer_state(&setup->fb, fb);
416 setup->framebuffer.x0 = 0;
417 setup->framebuffer.y0 = 0;
418 setup->framebuffer.x1 = fb->width-1;
419 setup->framebuffer.y1 = fb->height-1;
420 setup->dirty |= LP_SETUP_NEW_SCISSOR;
429 lp_setup_try_clear_color_buffer(struct lp_setup_context *setup,
435 const enum pipe_format format = setup->fb.cbufs[cbuf]->format;
437 LP_DBG(DEBUG_SETUP, "%s state %d\n", __FUNCTION__, setup->state);
441 if (setup->state == SETUP_ACTIVE) {
442 struct lp_scene *scene = setup->scene;
474 set_scene_state(setup, SETUP_CLEARED, __FUNCTION__);
477 setup->clear.flags |= 1 << (cbuf + 2);
478 setup->clear.color_val[cbuf] = uc;
486 lp_setup_try_clear_zs(struct lp_setup_context *setup,
491 LP_DBG(DEBUG_SETUP, "%s state %d\n", __FUNCTION__, setup->state);
493 enum pipe_format format = setup->fb.zsbuf->format;
513 if (setup->state == SETUP_ACTIVE) {
514 struct lp_scene *scene = setup->scene;
533 set_scene_state(setup, SETUP_CLEARED, __FUNCTION__);
535 setup->clear.flags |= flags;
537 setup->clear.zsmask |= zsmask;
538 setup->clear.zsvalue =
539 (setup->clear.zsvalue & ~zsmask) | (zsvalue & zsmask);
547 lp_setup_clear(struct lp_setup_context *setup,
561 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) {
562 set_scene_state( setup, SETUP_FLUSHED, __FUNCTION__ );
564 if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs))
571 for (unsigned i = 0; i < setup->fb.nr_cbufs; i++) {
572 if ((flags & (1 << (2 + i))) && setup->fb.cbufs[i]) {
573 if (!lp_setup_try_clear_color_buffer(setup, color, i)) {
574 set_scene_state( setup, SETUP_FLUSHED, __FUNCTION__ );
576 if (!lp_setup_try_clear_color_buffer(setup, color, i))
586 lp_setup_bind_rasterizer( struct lp_setup_context *setup,
591 setup->ccw_is_frontface = rast->front_ccw;
592 setup->cullmode = rast->cull_face;
593 setup->triangle = first_triangle;
594 setup->rect = first_rectangle;
595 setup->multisample = rast->multisample;
596 setup->pixel_offset = rast->half_pixel_center ? 0.5f : 0.0f;
597 setup->bottom_edge_rule = rast->bottom_edge_rule;
599 if (setup->scissor_test != rast->scissor) {
600 setup->dirty |= LP_SETUP_NEW_SCISSOR;
601 setup->scissor_test = rast->scissor;
604 setup->flatshade_first = rast->flatshade_first;
605 setup->line_width = rast->line_width;
606 setup->rectangular_lines = rast->line_rectangular;
608 setup->point_size = rast->point_size;
609 setup->sprite_coord_enable = rast->sprite_coord_enable;
610 setup->sprite_coord_origin = rast->sprite_coord_mode;
611 setup->point_tri_clip = rast->point_size_per_vertex;
612 setup->point_size_per_vertex = rast->point_size_per_vertex;
613 setup->legacy_points = !rast->point_quad_rasterization && !setup->multisample;
618 lp_setup_set_setup_variant(struct lp_setup_context *setup,
623 setup->setup.variant = variant;
628 lp_setup_set_fs_variant(struct lp_setup_context *setup,
633 setup->fs.current.variant = variant;
634 setup->dirty |= LP_SETUP_NEW_FS;
639 lp_setup_set_fs_constants(struct lp_setup_context *setup,
645 assert(num <= ARRAY_SIZE(setup->constants));
649 util_copy_constant_buffer(&setup->constants[i].current,
652 for (; i < ARRAY_SIZE(setup->constants); i++) {
653 util_copy_constant_buffer(&setup->constants[i].current, NULL, false);
655 setup->dirty |= LP_SETUP_NEW_CONSTANTS;
660 lp_setup_set_fs_ssbos(struct lp_setup_context *setup,
667 assert(num <= ARRAY_SIZE(setup->ssbos));
671 util_copy_shader_buffer(&setup->ssbos[i].current, &buffers[i]);
673 for (; i < ARRAY_SIZE(setup->ssbos); i++) {
674 util_copy_shader_buffer(&setup->ssbos[i].current, NULL);
676 setup->ssbo_write_mask = ssbo_write_mask;
677 setup->dirty |= LP_SETUP_NEW_SSBOS;
682 lp_setup_set_fs_images(struct lp_setup_context *setup,
690 assert(num <= ARRAY_SIZE(setup->images));
694 util_copy_image_view(&setup->images[i].current, &images[i]);
698 struct lp_jit_image *jit_image = &setup->fs.current.jit_context.images[i];
704 /* regular texture - setup array of mipmap level offsets */
754 for (; i < ARRAY_SIZE(setup->images); i++) {
755 util_copy_image_view(&setup->images[i].current, NULL);
757 setup->dirty |= LP_SETUP_NEW_FS;
762 lp_setup_set_alpha_ref_value(struct lp_setup_context *setup,
767 if (setup->fs.current.jit_context.alpha_ref_value != alpha_ref_value) {
768 setup->fs.current.jit_context.alpha_ref_value = alpha_ref_value;
769 setup->dirty |= LP_SETUP_NEW_FS;
775 lp_setup_set_stencil_ref_values(struct lp_setup_context *setup,
780 if (setup->fs.current.jit_context.stencil_ref_front != refs[0] ||
781 setup->fs.current.jit_context.stencil_ref_back != refs[1]) {
782 setup->fs.current.jit_context.stencil_ref_front = refs[0];
783 setup->fs.current.jit_context.stencil_ref_back = refs[1];
784 setup->dirty |= LP_SETUP_NEW_FS;
790 lp_setup_set_blend_color(struct lp_setup_context *setup,
797 if (memcmp(&setup->blend_color.current,
799 memcpy(&setup->blend_color.current, blend_color, sizeof *blend_color);
800 setup->dirty |= LP_SETUP_NEW_BLEND_COLOR;
806 lp_setup_set_scissors(struct lp_setup_context *setup,
814 setup->scissors[i].x0 = scissors[i].minx;
815 setup->scissors[i].x1 = scissors[i].maxx-1;
816 setup->scissors[i].y0 = scissors[i].miny;
817 setup->scissors[i].y1 = scissors[i].maxy-1;
819 setup->dirty |= LP_SETUP_NEW_SCISSOR;
824 lp_setup_set_sample_mask(struct lp_setup_context *setup,
827 if (setup->fs.current.jit_context.sample_mask != sample_mask) {
828 setup->fs.current.jit_context.sample_mask = sample_mask;
829 setup->dirty |= LP_SETUP_NEW_FS;
835 lp_setup_set_rasterizer_discard(struct lp_setup_context *setup,
838 if (setup->rasterizer_discard != rasterizer_discard) {
839 setup->rasterizer_discard = rasterizer_discard;
840 setup->line = first_line;
841 setup->point = first_point;
842 setup->triangle = first_triangle;
843 setup->rect = first_rectangle;
849 lp_setup_set_vertex_info(struct lp_setup_context *setup,
854 setup->vertex_info = vertex_info;
859 lp_setup_set_linear_mode(struct lp_setup_context *setup,
868 setup->permit_linear_rasterizer = (mode &&
871 setup->permit_linear_rasterizer = FALSE;
880 lp_setup_set_viewports(struct lp_setup_context *setup,
884 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe);
906 setup->vpwh.x0 = (int)(x0 + 0.499f);
907 setup->vpwh.x1 = (int)(viewports[0].scale[0] * 2.0f + x0 - 0.501f);
908 setup->vpwh.y0 = (int)(y0 + 0.499f);
909 setup->vpwh.y1 = (int)(half_height * 2.0f + y0 - 0.501f);
910 setup->dirty |= LP_SETUP_NEW_SCISSOR;
920 if (setup->viewports[i].min_depth != min_depth ||
921 setup->viewports[i].max_depth != max_depth) {
922 setup->viewports[i].min_depth = min_depth;
923 setup->viewports[i].max_depth = max_depth;
924 setup->dirty |= LP_SETUP_NEW_VIEWPORTS;
934 lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup,
942 const unsigned max_tex_num = MAX2(num, setup->fs.current_tex_num);
950 if (setup->fs.current_tex[i])
951 llvmpipe_resource_unmap(setup->fs.current_tex[i], 0, 0);
957 jit_tex = &setup->fs.current.jit_context.textures[i];
962 pipe_resource_reference(&setup->fs.current_tex[i], res);
965 /* regular texture - setup array of mipmap level offsets */
1076 pipe_resource_reference(&setup->fs.current_tex[i], NULL);
1079 setup->fs.current_tex_num = num;
1081 setup->dirty |= LP_SETUP_NEW_FS;
1089 lp_setup_set_fragment_sampler_state(struct lp_setup_context *setup,
1102 jit_sam = &setup->fs.current.jit_context.samplers[i];
1112 setup->dirty |= LP_SETUP_NEW_FS;
1122 lp_setup_is_resource_referenced(const struct lp_setup_context *setup,
1126 for (unsigned i = 0; i < setup->fb.nr_cbufs; i++) {
1127 if (setup->fb.cbufs[i] && setup->fb.cbufs[i]->texture == texture)
1130 if (setup->fb.zsbuf && setup->fb.zsbuf->texture == texture) {
1135 for (unsigned i = 0; i < setup->num_active_scenes; i++) {
1136 struct lp_scene *scene = setup->scenes[i];
1169 try_update_scene_state(struct lp_setup_context *setup)
1172 boolean new_scene = (setup->fs.stored == NULL);
1173 struct lp_scene *scene = setup->scene;
1177 if (setup->dirty & LP_SETUP_NEW_VIEWPORTS) {
1187 lp_scene_alloc(scene, sizeof setup->viewports);
1194 memcpy(stored, setup->viewports, sizeof setup->viewports);
1196 setup->fs.current.jit_context.viewports = stored;
1197 setup->dirty |= LP_SETUP_NEW_FS;
1200 if (setup->dirty & LP_SETUP_NEW_BLEND_COLOR) {
1216 fstored[i] = setup->blend_color.current.color[i % 4];
1221 uint8_t c = float_to_ubyte(setup->blend_color.current.color[i]);
1227 setup->blend_color.stored = stored;
1228 setup->fs.current.jit_context.u8_blend_color = stored;
1229 setup->fs.current.jit_context.f_blend_color = fstored;
1230 setup->dirty |= LP_SETUP_NEW_FS;
1233 struct llvmpipe_context *llvmpipe = llvmpipe_context(setup->pipe);
1235 lp_setup_set_fs_constants(llvmpipe->setup,
1239 if (setup->dirty & LP_SETUP_NEW_CONSTANTS) {
1240 for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); ++i) {
1241 struct pipe_resource *buffer = setup->constants[i].current.buffer;
1242 const unsigned current_size = MIN2(setup->constants[i].current.buffer_size,
1252 else if (setup->constants[i].current.user_buffer) {
1254 current_data = (ubyte *) setup->constants[i].current.user_buffer;
1258 current_data += setup->constants[i].current.buffer_offset;
1262 if (setup->constants[i].stored_size != current_size ||
1263 !setup->constants[i].stored_data ||
1264 memcmp(setup->constants[i].stored_data,
1277 setup->constants[i].stored_size = current_size;
1278 setup->constants[i].stored_data = stored;
1280 setup->fs.current.jit_context.constants[i] =
1281 setup->constants[i].stored_data;
1284 setup->constants[i].stored_size = 0;
1285 setup->constants[i].stored_data = NULL;
1286 setup->fs.current.jit_context.constants[i] = fake_const_buf;
1290 DIV_ROUND_UP(setup->constants[i].stored_size,
1292 setup->fs.current.jit_context.num_constants[i] = num_constants;
1293 setup->dirty |= LP_SETUP_NEW_FS;
1297 if (setup->dirty & LP_SETUP_NEW_SSBOS) {
1298 for (unsigned i = 0; i < ARRAY_SIZE(setup->ssbos); ++i) {
1299 struct pipe_resource *buffer = setup->ssbos[i].current.buffer;
1307 current_data += setup->ssbos[i].current.buffer_offset;
1309 setup->fs.current.jit_context.ssbos[i] =
1311 setup->fs.current.jit_context.num_ssbos[i] =
1312 setup->ssbos[i].current.buffer_size;
1314 setup->fs.current.jit_context.ssbos[i] = NULL;
1315 setup->fs.current.jit_context.num_ssbos[i] = 0;
1317 setup->dirty |= LP_SETUP_NEW_FS;
1321 if (setup->dirty & LP_SETUP_NEW_FS) {
1322 if (!setup->fs.stored ||
1323 memcmp(setup->fs.stored,
1324 &setup->fs.current,
1325 sizeof setup->fs.current) != 0) {
1328 * and append it to the bin's setup data buffer.
1338 &setup->fs.current.jit_context,
1339 sizeof setup->fs.current.jit_context);
1343 stored->variant = setup->fs.current.variant;
1346 setup->fs.current.variant)) {
1350 setup->fs.stored = stored;
1355 for (unsigned i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) {
1356 if (setup->fs.current_tex[i]) {
1358 setup->fs.current_tex[i],
1366 for (unsigned i = 0; i < ARRAY_SIZE(setup->ssbos); i++) {
1367 if (setup->ssbos[i].current.buffer) {
1369 setup->ssbos[i].current.buffer,
1370 new_scene, setup->ssbo_write_mask & (1 << i))) {
1377 for (unsigned i = 0; i < ARRAY_SIZE(setup->images); i++) {
1378 if (setup->images[i].current.resource) {
1380 setup->images[i].current.resource,
1382 setup->images[i].current.shader_access & PIPE_IMAGE_ACCESS_WRITE)) {
1391 if (setup->dirty & LP_SETUP_NEW_SCISSOR) {
1393 setup->draw_regions[i] = setup->framebuffer;
1394 if (setup->scissor_test) {
1395 u_rect_possible_intersection(&setup->scissors[i],
1396 &setup->draw_regions[i]);
1399 if (setup->permit_linear_rasterizer) {
1402 !!memcmp(&setup->vpwh, &setup->framebuffer,
1403 sizeof(setup->framebuffer));
1405 assert(setup->viewport_index_slot < 0);
1407 u_rect_possible_intersection(&setup->vpwh,
1408 &setup->draw_regions[0]);
1411 else if (setup->point_tri_clip) {
1424 !!memcmp(&setup->vpwh, &setup->framebuffer,
1425 sizeof(setup->framebuffer));
1427 u_rect_possible_intersection(&setup->vpwh,
1428 &setup->draw_regions[0]);
1433 setup->dirty = 0;
1435 assert(setup->fs.stored);
1441 lp_setup_update_state(struct lp_setup_context *setup,
1448 * setup code. This may get refactored/changed...
1451 struct llvmpipe_context *lp = llvmpipe_context(setup->pipe);
1456 if (lp->setup->dirty) {
1460 assert(setup->setup.variant);
1465 setup->psize_slot = lp->psize_slot;
1466 setup->viewport_index_slot = lp->viewport_index_slot;
1467 setup->layer_slot = lp->layer_slot;
1468 setup->face_slot = lp->face_slot;
1473 setup->setup.variant->key.size);
1476 &setup->setup.variant->key,
1477 setup->setup.variant->key.size) == 0);
1480 if (update_scene && setup->state != SETUP_ACTIVE) {
1481 if (!set_scene_state(setup, SETUP_ACTIVE, __FUNCTION__))
1488 if (update_scene && setup->scene) {
1489 assert(setup->state == SETUP_ACTIVE);
1491 if (try_update_scene_state(setup))
1499 if (!set_scene_state(setup, SETUP_FLUSHED, __FUNCTION__))
1502 if (!set_scene_state(setup, SETUP_ACTIVE, __FUNCTION__))
1505 if (!setup->scene)
1508 return try_update_scene_state(setup);
1519 lp_setup_destroy(struct lp_setup_context *setup)
1521 lp_setup_reset(setup);
1523 util_unreference_framebuffer_state(&setup->fb);
1525 for (unsigned i = 0; i < ARRAY_SIZE(setup->fs.current_tex); i++) {
1526 struct pipe_resource **res_ptr = &setup->fs.current_tex[i];
1532 for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); i++) {
1533 pipe_resource_reference(&setup->constants[i].current.buffer, NULL);
1536 for (unsigned i = 0; i < ARRAY_SIZE(setup->ssbos); i++) {
1537 pipe_resource_reference(&setup->ssbos[i].current.buffer, NULL);
1541 for (unsigned i = 0; i < setup->num_active_scenes; i++) {
1542 struct lp_scene *scene = setup->scenes[i];
1550 LP_DBG(DEBUG_SETUP, "number of scenes used: %d\n", setup->num_active_scenes);
1551 slab_destroy(&setup->scene_slab);
1553 FREE(setup);
1567 struct lp_setup_context *setup = CALLOC_STRUCT(lp_setup_context);
1568 if (!setup) {
1572 lp_setup_init_vbuf(setup);
1576 setup->pipe = pipe;
1578 setup->num_threads = screen->num_threads;
1579 setup->vbuf = draw_vbuf_stage(draw, &setup->base);
1580 if (!setup->vbuf) {
1584 draw_set_rasterize_stage(draw, setup->vbuf);
1585 draw_set_render(draw, &setup->base);
1587 slab_create(&setup->scene_slab,
1591 setup->scenes[0] = lp_scene_create(setup);
1592 if (!setup->scenes[0]) {
1595 setup->num_active_scenes++;
1597 setup->triangle = first_triangle;
1598 setup->line = first_line;
1599 setup->point = first_point;
1601 setup->dirty = ~0;
1604 setup->framebuffer.x1 = -1;
1605 setup->framebuffer.y1 = -1;
1607 return setup;
1611 if (setup->scenes[i]) {
1612 lp_scene_destroy(setup->scenes[i]);
1616 setup->vbuf->destroy(setup->vbuf);
1618 FREE(setup);
1628 lp_setup_begin_query(struct lp_setup_context *setup,
1631 set_scene_state(setup, SETUP_ACTIVE, "begin_query");
1641 assert(setup->active_binned_queries < LP_MAX_ACTIVE_BINNED_QUERIES);
1643 if (setup->active_binned_queries >= LP_MAX_ACTIVE_BINNED_QUERIES) {
1646 assert(setup->active_queries[setup->active_binned_queries] == NULL);
1647 setup->active_queries[setup->active_binned_queries] = pq;
1648 setup->active_binned_queries++;
1650 assert(setup->scene);
1651 if (setup->scene) {
1652 if (!lp_scene_bin_everywhere(setup->scene,
1656 if (!lp_setup_flush_and_restart(setup))
1659 if (!lp_scene_bin_everywhere(setup->scene,
1665 setup->scene->had_queries |= TRUE;
1674 lp_setup_end_query(struct lp_setup_context *setup, struct llvmpipe_query *pq)
1676 set_scene_state(setup, SETUP_ACTIVE, "end_query");
1678 assert(setup->scene);
1679 if (setup->scene) {
1683 lp_fence_reference(&pq->fence, setup->scene->fence);
1692 !(setup->scene->tiles_x | setup->scene->tiles_y)) {
1700 if (!lp_scene_bin_everywhere(setup->scene,
1703 if (!lp_setup_flush_and_restart(setup))
1706 if (!lp_scene_bin_everywhere(setup->scene,
1712 setup->scene->had_queries |= TRUE;
1716 struct llvmpipe_screen *screen = llvmpipe_screen(setup->pipe->screen);
1734 for (i = 0; i < setup->active_binned_queries; i++) {
1735 if (setup->active_queries[i] == pq)
1738 assert(i < setup->active_binned_queries);
1739 if (i == setup->active_binned_queries)
1741 setup->active_binned_queries--;
1742 setup->active_queries[i] = setup->active_queries[setup->active_binned_queries];
1743 setup->active_queries[setup->active_binned_queries] = NULL;
1749 lp_setup_flush_and_restart(struct lp_setup_context *setup)
1753 assert(setup->state == SETUP_ACTIVE);
1755 if (!set_scene_state(setup, SETUP_FLUSHED, __FUNCTION__))
1758 if (!lp_setup_update_state(setup, TRUE))