Lines Matching defs:draw
101 struct draw_data draw;
108 /* Describes an indirect draw (see glDrawArraysIndirect()) */
128 * the draw patching jobs which have the suppress_prefetch flag set. Merging the
129 * min/max and draw contexts would prevent such optimizations (draw contexts are
130 * shared by all indirect draw in a batch).
145 /* Indirect draw shader inputs. Those are stored in FAU. */
217 get_address_imm(b, builder->draw.draw_ctx, offset),
227 get_address_imm(b, builder->draw.draw_ctx, offset),
248 get_address_imm(b, builder->draw.min_max_ctx, offset),
263 builder->draw.min_max_ctx,
274 builder->draw.min_max_ctx,
296 builder->draw.draw_ctx = get_input_field(b, draw_ctx);
297 builder->draw.draw_buf = get_input_field(b, draw_buf);
298 builder->draw.draw_buf_stride = get_input_field(b, draw_buf_stride);
301 builder->draw.index_buf = get_input_field(b, index_buf);
302 builder->draw.min_max_ctx = get_input_field(b, min_max_ctx);
304 builder->draw.restart_index =
380 nir_ult(b, builder->draw.instance_count, nir_imm_int(b, 2)),
417 nir_iadd_imm(b, builder->draw.vertex_count, -1), 1);
424 nir_imul_imm(b, builder->draw.vertex_start, index_size);
526 nir_uge(b, builder->draw.instance_count, two));
529 nir_iand(b, nir_ine(b, builder->draw.start_instance, zero),
539 * delayed start in an indexed draw.
546 builder->draw.start_instance),
582 nir_ult(b, builder->draw.instance_count, nir_imm_int(b, 2));
646 nir_uge(b, builder->draw.instance_count, nir_imm_int(b, 2));
715 builder->draw.instance_count);
750 nir_usub_sat(b, builder->draw.instance_count, one);
835 builder->jobs.offset_start = builder->draw.vertex_start;
836 builder->instance_size.raw = builder->draw.vertex_count;
856 get_address(b, builder->draw.index_buf,
857 nir_imul_imm(b, builder->draw.vertex_start, index_size));
861 nir_imul_imm(b, builder->draw.vertex_count, index_size));
925 builder->jobs.offset_start = nir_iadd(b, min, builder->draw.index_bias);
929 /* Patch a draw sequence */
937 nir_ssa_def *draw_ptr = builder->draw.draw_buf;
940 builder->draw.vertex_count = get_indexed_draw_field(b, draw_ptr, count);
941 builder->draw.start_instance = get_indexed_draw_field(b, draw_ptr, start_instance);
942 builder->draw.instance_count =
944 builder->draw.vertex_start = get_indexed_draw_field(b, draw_ptr, start);
945 builder->draw.index_bias = get_indexed_draw_field(b, draw_ptr, index_bias);
947 builder->draw.vertex_count = get_draw_field(b, draw_ptr, count);
948 builder->draw.start_instance = get_draw_field(b, draw_ptr, start_instance);
949 builder->draw.instance_count = get_draw_field(b, draw_ptr, instance_count);
950 builder->draw.vertex_start = get_draw_field(b, draw_ptr, start);
953 assert(builder->draw.vertex_count->num_components);
956 nir_imul(b, builder->draw.vertex_count, builder->draw.instance_count);
959 /* If there's nothing to draw, turn the vertex/tiler jobs into
991 builder->draw.index_bias :
998 builder->draw.start_instance, 1);
1003 /* Search the min/max index in the range covered by the indirect draw call */
1008 nir_ssa_def *restart_index = builder->draw.restart_index;
1012 nir_ssa_def *draw_ptr = builder->draw.draw_buf;
1014 builder->draw.vertex_count = get_draw_field(b, draw_ptr, count);
1015 builder->draw.vertex_start = get_draw_field(b, draw_ptr, start);
1026 get_address(b, builder->draw.index_buf,
1027 nir_imul_imm(b, builder->draw.vertex_start, index_size));
1032 nir_iadd(b, start, nir_imul_imm(b, builder->draw.vertex_count, index_size));
1036 /* Align on 4 bytes, non-aligned indices are handled in the indirect draw job. */
1200 panfrost_bo_create(dev, state_bo_size, 0, "Indirect draw states");
1219 "Indirect draw varying heap");