Lines Matching refs:ice
60 can_cut_index_handle_restart_index(struct crocus_context *ice,
78 can_cut_index_handle_prim(struct crocus_context *ice,
81 struct crocus_screen *screen = (struct crocus_screen*)ice->ctx.screen;
88 if (!can_cut_index_handle_restart_index(ice, draw))
116 crocus_update_draw_info(struct crocus_context *ice,
120 struct crocus_screen *screen = (struct crocus_screen *)ice->ctx.screen;
126 struct pipe_rasterizer_state *rs_state = crocus_get_rast_state(ice);
139 if (ice->state.prim_mode != mode) {
140 ice->state.prim_mode = mode;
143 if (ice->state.reduced_prim_mode != reduced) {
145 ice->state.dirty |= CROCUS_DIRTY_GEN4_CLIP_PROG | CROCUS_DIRTY_GEN4_SF_PROG;
147 ice->state.stage_dirty |= CROCUS_STAGE_DIRTY_UNCOMPILED_FS;
148 ice->state.reduced_prim_mode = reduced;
152 ice->state.dirty |= CROCUS_DIRTY_GEN8_VF_TOPOLOGY;
155 ice->state.dirty |= CROCUS_DIRTY_GEN4_FF_GS_PROG;
158 ice->state.dirty |= CROCUS_DIRTY_GEN7_SBE;
162 if (points_or_lines != ice->state.prim_is_points_or_lines) {
163 ice->state.prim_is_points_or_lines = points_or_lines;
164 ice->state.dirty |= CROCUS_DIRTY_CLIP;
169 ice->state.vertices_per_patch != ice->state.patch_vertices) {
170 ice->state.vertices_per_patch = ice->state.patch_vertices;
173 ice->state.dirty |= CROCUS_DIRTY_GEN8_VF_TOPOLOGY;
175 ice->state.stage_dirty |= CROCUS_STAGE_DIRTY_UNCOMPILED_TCS;
179 crocus_get_shader_info(ice, MESA_SHADER_TESS_CTRL);
182 ice->state.stage_dirty |= CROCUS_STAGE_DIRTY_CONSTANTS_TCS;
183 ice->state.shaders[MESA_SHADER_TESS_CTRL].sysvals_need_upload = true;
188 ice->state.cut_index;
189 if (ice->state.primitive_restart != info->primitive_restart ||
190 ice->state.cut_index != cut_index) {
192 ice->state.dirty |= CROCUS_DIRTY_GEN75_VF;
193 ice->state.primitive_restart = info->primitive_restart;
194 ice->state.cut_index = info->restart_index;
202 crocus_update_draw_parameters(struct crocus_context *ice,
210 if (ice->state.vs_uses_draw_params) {
211 struct crocus_state_ref *draw_params = &ice->draw.draw_params;
219 ice->draw.params_valid = false;
223 if (!ice->draw.params_valid ||
224 ice->draw.params.firstvertex != firstvertex ||
225 ice->draw.params.baseinstance != info->start_instance) {
228 ice->draw.params.firstvertex = firstvertex;
229 ice->draw.params.baseinstance = info->start_instance;
230 ice->draw.params_valid = true;
232 u_upload_data(ice->ctx.stream_uploader, 0,
233 sizeof(ice->draw.params), 4, &ice->draw.params,
239 if (ice->state.vs_uses_derived_draw_params) {
240 struct crocus_state_ref *derived_params = &ice->draw.derived_draw_params;
243 if (ice->draw.derived_params.drawid != drawid_offset ||
244 ice->draw.derived_params.is_indexed_draw != is_indexed_draw) {
247 ice->draw.derived_params.drawid = drawid_offset;
248 ice->draw.derived_params.is_indexed_draw = is_indexed_draw;
250 u_upload_data(ice->ctx.stream_uploader, 0,
251 sizeof(ice->draw.derived_params), 4,
252 &ice->draw.derived_params, &derived_params->offset,
258 struct crocus_screen *screen = (struct crocus_screen *)ice->ctx.screen;
259 ice->state.dirty |= CROCUS_DIRTY_VERTEX_BUFFERS |
262 ice->state.dirty |= CROCUS_DIRTY_GEN8_VF_SGVS;
267 crocus_indirect_draw_vbo(struct crocus_context *ice,
273 struct crocus_batch *batch = &ice->batches[CROCUS_BATCH_RENDER];
280 ice->state.predicate == CROCUS_PREDICATE_STATE_USE_BIT) {
285 uint64_t orig_dirty = ice->state.dirty;
286 uint64_t orig_stage_dirty = ice->state.stage_dirty;
292 if (ice->state.vs_uses_draw_params ||
293 ice->state.vs_uses_derived_draw_params)
294 crocus_update_draw_parameters(ice, &info, drawid_offset + i, &indirect, draws);
296 screen->vtbl.upload_render_state(ice, batch, &info, drawid_offset + i, &indirect, draws);
298 ice->state.dirty &= ~CROCUS_ALL_DIRTY_FOR_RENDER;
299 ice->state.stage_dirty &= ~CROCUS_ALL_STAGE_DIRTY_FOR_RENDER;
305 ice->state.predicate == CROCUS_PREDICATE_STATE_USE_BIT) {
311 ice->state.dirty = orig_dirty;
312 ice->state.stage_dirty = orig_stage_dirty;
316 crocus_simple_draw_vbo(struct crocus_context *ice,
322 struct crocus_batch *batch = &ice->batches[CROCUS_BATCH_RENDER];
328 if (ice->state.vs_uses_draw_params ||
329 ice->state.vs_uses_derived_draw_params)
330 crocus_update_draw_parameters(ice, draw, drawid_offset, indirect, sc);
332 screen->vtbl.upload_render_state(ice, batch, draw, drawid_offset, indirect, sc);
371 struct crocus_context *ice = (struct crocus_context *) ctx;
372 struct crocus_screen *screen = (struct crocus_screen*)ice->ctx.screen;
373 struct crocus_batch *batch = &ice->batches[CROCUS_BATCH_RENDER];
375 if (!crocus_check_conditional_render(ice))
378 if (info->primitive_restart && !can_cut_index_handle_prim(ice, info)) {
410 ice->state.dirty |= CROCUS_ALL_DIRTY_FOR_RENDER & ~(CROCUS_DIRTY_GEN7_SO_BUFFERS | CROCUS_DIRTY_GEN6_SVBI);
411 ice->state.stage_dirty |= CROCUS_ALL_STAGE_DIRTY_FOR_RENDER;
418 crocus_update_draw_info(ice, info, draws);
420 if (!crocus_update_compiled_shaders(ice))
423 if (ice->state.dirty & CROCUS_DIRTY_RENDER_RESOLVES_AND_FLUSHES) {
426 if (ice->shaders.prog[stage])
427 crocus_predraw_resolve_inputs(ice, batch, draw_aux_buffer_disabled,
430 crocus_predraw_resolve_framebuffer(ice, batch, draw_aux_buffer_disabled);
436 crocus_indirect_draw_vbo(ice, info, drawid_offset, indirect, draws);
438 crocus_simple_draw_vbo(ice, info, drawid_offset, indirect, draws);
442 crocus_postdraw_update_resolve_tracking(ice, batch);
444 ice->state.dirty &= ~CROCUS_ALL_DIRTY_FOR_RENDER;
445 ice->state.stage_dirty &= ~CROCUS_ALL_STAGE_DIRTY_FOR_RENDER;
449 crocus_update_grid_size_resource(struct crocus_context *ice,
452 struct crocus_state_ref *grid_ref = &ice->state.grid_size;
453 const struct crocus_compiled_shader *shader = ice->shaders.prog[MESA_SHADER_COMPUTE];
463 memset(ice->state.last_grid, 0, sizeof(ice->state.last_grid));
464 } else if (memcmp(ice->state.last_grid, grid->grid, sizeof(grid->grid)) != 0) {
465 memcpy(ice->state.last_grid, grid->grid, sizeof(grid->grid));
466 u_upload_data(ice->ctx.const_uploader, 0, sizeof(grid->grid), 4,
474 ice->state.stage_dirty |= CROCUS_STAGE_DIRTY_BINDINGS_CS;
481 struct crocus_context *ice = (struct crocus_context *) ctx;
482 struct crocus_batch *batch = &ice->batches[CROCUS_BATCH_COMPUTE];
485 if (!crocus_check_conditional_render(ice))
489 ice->state.dirty |= CROCUS_ALL_DIRTY_FOR_COMPUTE;
490 ice->state.stage_dirty |= CROCUS_ALL_STAGE_DIRTY_FOR_COMPUTE;
496 if (ice->state.dirty & CROCUS_DIRTY_COMPUTE_RESOLVES_AND_FLUSHES) {
497 crocus_predraw_resolve_inputs(ice, &ice->batches[CROCUS_BATCH_RENDER], NULL,
503 crocus_update_compiled_compute_shader(ice);
505 if (memcmp(ice->state.last_block, grid->block, sizeof(grid->block)) != 0) {
506 memcpy(ice->state.last_block, grid->block, sizeof(grid->block));
507 ice->state.stage_dirty |= CROCUS_STAGE_DIRTY_CONSTANTS_CS;
508 ice->state.shaders[MESA_SHADER_COMPUTE].sysvals_need_upload = true;
511 crocus_update_grid_size_resource(ice, grid);
513 if (ice->state.compute_predicate) {
515 ice->state.compute_predicate = NULL;
520 screen->vtbl.upload_compute_state(ice, batch, grid);
524 ice->state.dirty &= ~CROCUS_ALL_DIRTY_FOR_COMPUTE;
525 ice->state.stage_dirty &= ~CROCUS_ALL_STAGE_DIRTY_FOR_COMPUTE;