Lines Matching refs:r300
72 static uint32_t r300_provoking_vertex_fixes(struct r300_context *r300, in r300_provoking_vertex_fixes() argument
75 struct r300_rs_state* rs = (struct r300_rs_state*)r300->rs_state.state; in r300_provoking_vertex_fixes()
117 void r500_emit_index_bias(struct r300_context *r300, int index_bias) in r500_emit_index_bias() argument
119 CS_LOCALS(r300); in r500_emit_index_bias()
127 static void r300_emit_draw_init(struct r300_context *r300, unsigned mode, in r300_emit_draw_init() argument
130 CS_LOCALS(r300); in r300_emit_draw_init()
136 r300_provoking_vertex_fixes(r300, mode)); in r300_emit_draw_init()
149 static void r300_split_index_bias(struct r300_context *r300, int index_bias, in r300_split_index_bias() argument
152 struct pipe_vertex_buffer *vb, *vbufs = r300->vertex_buffer; in r300_split_index_bias()
153 struct pipe_vertex_element *velem = r300->velems->velem; in r300_split_index_bias()
162 for (i = 0; i < r300->velems->count; i++) { in r300_split_index_bias()
194 static boolean r300_reserve_cs_dwords(struct r300_context *r300, in r300_reserve_cs_dwords() argument
205 cs_dwords += r300_get_num_dirty_dwords(r300); in r300_reserve_cs_dwords()
207 if (r300->screen->caps.is_r500) in r300_reserve_cs_dwords()
216 cs_dwords += r300_get_num_cs_end_dwords(r300); in r300_reserve_cs_dwords()
219 if (!r300->rws->cs_check_space(&r300->cs, cs_dwords, false)) { in r300_reserve_cs_dwords()
220 r300_flush(&r300->context, PIPE_FLUSH_ASYNC, NULL); in r300_reserve_cs_dwords()
237 static boolean r300_emit_states(struct r300_context *r300, in r300_emit_states() argument
251 if (!r300_emit_buffer_validate(r300, validate_vbos, in r300_emit_states()
260 r300_emit_dirty_state(r300); in r300_emit_states()
262 if (r300->screen->caps.is_r500) { in r300_emit_states()
263 if (r300->screen->caps.has_tcl) in r300_emit_states()
264 r500_emit_index_bias(r300, index_bias); in r300_emit_states()
266 r500_emit_index_bias(r300, 0); in r300_emit_states()
270 (r300->vertex_arrays_dirty || in r300_emit_states()
271 r300->vertex_arrays_indexed != indexed || in r300_emit_states()
272 r300->vertex_arrays_offset != buffer_offset || in r300_emit_states()
273 r300->vertex_arrays_instance_id != instance_id)) { in r300_emit_states()
274 r300_emit_vertex_arrays(r300, buffer_offset, indexed, instance_id); in r300_emit_states()
276 r300->vertex_arrays_dirty = FALSE; in r300_emit_states()
277 r300->vertex_arrays_indexed = indexed; in r300_emit_states()
278 r300->vertex_arrays_offset = buffer_offset; in r300_emit_states()
279 r300->vertex_arrays_instance_id = instance_id; in r300_emit_states()
283 r300_emit_vertex_arrays_swtcl(r300, indexed); in r300_emit_states()
300 static boolean r300_prepare_for_rendering(struct r300_context *r300, in r300_prepare_for_rendering() argument
309 if (r300_reserve_cs_dwords(r300, flags, cs_dwords)) in r300_prepare_for_rendering()
312 return r300_emit_states(r300, flags, index_buffer, buffer_offset, in r300_prepare_for_rendering()
316 static boolean immd_is_good_idea(struct r300_context *r300, in immd_is_good_idea() argument
319 if (DBG_ON(r300, DBG_NO_IMMD)) { in immd_is_good_idea()
323 if (count * r300->velems->vertex_size_dwords > IMMD_DWORDS) { in immd_is_good_idea()
336 static void r300_draw_arrays_immediate(struct r300_context *r300, in r300_draw_arrays_immediate() argument
342 unsigned vertex_element_count = r300->velems->count; in r300_draw_arrays_immediate()
346 unsigned vertex_size = r300->velems->vertex_size_dwords; in r300_draw_arrays_immediate()
362 CS_LOCALS(r300); in r300_draw_arrays_immediate()
364 if (!r300_prepare_for_rendering(r300, PREP_EMIT_STATES, NULL, dwords, 0, 0, -1)) in r300_draw_arrays_immediate()
369 velem = &r300->velems->velem[i]; in r300_draw_arrays_immediate()
370 size[i] = r300->velems->format_size[i] / 4; in r300_draw_arrays_immediate()
372 vbuf = &r300->vertex_buffer[vbi]; in r300_draw_arrays_immediate()
377 map[vbi] = (uint32_t*)r300->rws->buffer_map(r300->rws, in r300_draw_arrays_immediate()
379 &r300->cs, PIPE_MAP_READ | PIPE_MAP_UNSYNCHRONIZED); in r300_draw_arrays_immediate()
385 r300_emit_draw_init(r300, info->mode, draw->count-1); in r300_draw_arrays_immediate()
402 static void r300_emit_draw_arrays(struct r300_context *r300, in r300_emit_draw_arrays() argument
407 CS_LOCALS(r300); in r300_emit_draw_arrays()
415 r300_emit_draw_init(r300, mode, count-1); in r300_emit_draw_arrays()
428 static void r300_emit_draw_elements(struct r300_context *r300, in r300_emit_draw_elements() argument
439 CS_LOCALS(r300); in r300_emit_draw_elements()
447 DBG(r300, DBG_DRAW, "r300: Indexbuf of %u indices, max %u\n", in r300_emit_draw_elements()
450 r300_emit_draw_init(r300, mode, max_index); in r300_emit_draw_elements()
500 static void r300_draw_elements_immediate(struct r300_context *r300, in r300_draw_elements_immediate() argument
510 CS_LOCALS(r300); in r300_draw_elements_immediate()
513 if (!r300_prepare_for_rendering(r300, in r300_draw_elements_immediate()
518 r300_emit_draw_init(r300, info->mode, info->max_index); in r300_draw_elements_immediate()
531 if (draw->index_bias && !r300->screen->caps.is_r500) { in r300_draw_elements_immediate()
555 if (draw->index_bias && !r300->screen->caps.is_r500) { in r300_draw_elements_immediate()
575 if (draw->index_bias && !r300->screen->caps.is_r500) { in r300_draw_elements_immediate()
586 static void r300_draw_elements(struct r300_context *r300, in r300_draw_elements() argument
597 boolean alt_num_verts = r300->screen->caps.is_r500 && in r300_draw_elements()
603 if (draw->index_bias && !r300->screen->caps.is_r500) { in r300_draw_elements()
604 r300_split_index_bias(r300, draw->index_bias, &buffer_offset, in r300_draw_elements()
608 r300_translate_index_buffer(r300, info, &indexBuffer, in r300_draw_elements()
614 uint16_t *ptr = r300->rws->buffer_map(r300->rws, r300_resource(orgIndexBuffer)->buf, in r300_draw_elements()
615 &r300->cs, in r300_draw_elements()
625 r300_upload_index_buffer(r300, &indexBuffer, indexSize, &start, in r300_draw_elements()
630 r300_upload_index_buffer(r300, &indexBuffer, indexSize, in r300_draw_elements()
636 if (!r300_prepare_for_rendering(r300, in r300_draw_elements()
643 r300_emit_draw_elements(r300, indexBuffer, indexSize, in r300_draw_elements()
654 r300_emit_draw_elements(r300, indexBuffer, indexSize, in r300_draw_elements()
663 if (!r300_prepare_for_rendering(r300, in r300_draw_elements()
678 static void r300_draw_arrays(struct r300_context *r300, in r300_draw_arrays() argument
683 boolean alt_num_verts = r300->screen->caps.is_r500 && in r300_draw_arrays()
690 if (!r300_prepare_for_rendering(r300, in r300_draw_arrays()
696 r300_emit_draw_arrays(r300, info->mode, count); in r300_draw_arrays()
704 r300_emit_draw_arrays(r300, info->mode, short_count); in r300_draw_arrays()
711 if (!r300_prepare_for_rendering(r300, in r300_draw_arrays()
720 static void r300_draw_arrays_instanced(struct r300_context *r300, in r300_draw_arrays_instanced() argument
727 r300_draw_arrays(r300, info, draw, i); in r300_draw_arrays_instanced()
730 static void r300_draw_elements_instanced(struct r300_context *r300, in r300_draw_elements_instanced() argument
737 r300_draw_elements(r300, info, draw, i); in r300_draw_elements_instanced()
740 static unsigned r300_max_vertex_count(struct r300_context *r300) in r300_max_vertex_count() argument
742 unsigned i, nr = r300->velems->count; in r300_max_vertex_count()
743 struct pipe_vertex_element *velems = r300->velems->velem; in r300_max_vertex_count()
748 &r300->vertex_buffer[velems[i].vertex_buffer_index]; in r300_max_vertex_count()
775 value = r300->velems->format_size[i]; in r300_max_vertex_count()
801 struct r300_context* r300 = r300_context(pipe); in r300_draw_vbo() local
805 if (r300->skip_rendering || in r300_draw_vbo()
810 r300_update_derived_state(r300); in r300_draw_vbo()
814 unsigned max_count = r300_max_vertex_count(r300); in r300_draw_vbo()
831 r300_draw_elements_immediate(r300, &info, &draw); in r300_draw_vbo()
833 r300_draw_elements(r300, &info, &draw, -1); in r300_draw_vbo()
836 r300_draw_elements_instanced(r300, &info, &draw); in r300_draw_vbo()
840 if (immd_is_good_idea(r300, draw.count)) { in r300_draw_vbo()
841 r300_draw_arrays_immediate(r300, &info, &draw); in r300_draw_vbo()
843 r300_draw_arrays(r300, &info, &draw, -1); in r300_draw_vbo()
846 r300_draw_arrays_instanced(r300, &info, &draw); in r300_draw_vbo()
869 struct r300_context* r300 = r300_context(pipe); in r300_swtcl_draw_vbo() local
872 if (r300->skip_rendering) { in r300_swtcl_draw_vbo()
880 draw_set_indexes(r300->draw, in r300_swtcl_draw_vbo()
887 r300_update_derived_state(r300); in r300_swtcl_draw_vbo()
889 draw_vbo(r300->draw, info, drawid_offset, NULL, &draw, 1, 0); in r300_swtcl_draw_vbo()
890 draw_flush(r300->draw); in r300_swtcl_draw_vbo()
899 struct r300_context* r300; member
921 struct r300_context* r300 = r300render->r300; in r300_render_get_vertex_info() local
923 return &r300->vertex_info; in r300_render_get_vertex_info()
931 struct r300_context* r300 = r300render->r300; in r300_render_allocate_vertices() local
932 struct radeon_winsys *rws = r300->rws; in r300_render_allocate_vertices()
935 DBG(r300, DBG_DRAW, "r300: render_allocate_vertices (size: %d)\n", size); in r300_render_allocate_vertices()
937 if (!r300->vbo || size + r300->draw_vbo_offset > r300->vbo->size) { in r300_render_allocate_vertices()
938 pb_reference(&r300->vbo, NULL); in r300_render_allocate_vertices()
939 r300->vbo = NULL; in r300_render_allocate_vertices()
942 r300->vbo = rws->buffer_create(rws, in r300_render_allocate_vertices()
947 if (!r300->vbo) { in r300_render_allocate_vertices()
950 r300->draw_vbo_offset = 0; in r300_render_allocate_vertices()
951 r300render->vbo_ptr = rws->buffer_map(rws, r300->vbo, &r300->cs, in r300_render_allocate_vertices()
962 struct r300_context* r300 = r300render->r300; in r300_render_map_vertices() local
964 DBG(r300, DBG_DRAW, "r300: render_map_vertices\n"); in r300_render_map_vertices()
967 return r300render->vbo_ptr + r300->draw_vbo_offset; in r300_render_map_vertices()
975 struct r300_context* r300 = r300render->r300; in r300_render_unmap_vertices() local
977 DBG(r300, DBG_DRAW, "r300: render_unmap_vertices\n"); in r300_render_unmap_vertices()
986 struct r300_context* r300 = r300render->r300; in r300_render_release_vertices() local
988 DBG(r300, DBG_DRAW, "r300: render_release_vertices\n"); in r300_render_release_vertices()
990 r300->draw_vbo_offset += r300render->vbo_max_used; in r300_render_release_vertices()
1008 struct r300_context* r300 = r300render->r300; in r300_render_draw_arrays() local
1013 CS_LOCALS(r300); in r300_render_draw_arrays()
1019 DBG(r300, DBG_DRAW, "r300: render_draw_arrays (count: %d)\n", count); in r300_render_draw_arrays()
1021 if (!r300_prepare_for_rendering(r300, in r300_render_draw_arrays()
1029 r300_provoking_vertex_fixes(r300, r300render->prim)); in r300_render_draw_arrays()
1042 struct r300_context* r300 = r300render->r300; in r300_render_draw_elements() local
1043 unsigned max_index = (r300->vbo->size - r300->draw_vbo_offset) / in r300_render_draw_elements()
1044 (r300render->r300->vertex_info.size * 4) - 1; in r300_render_draw_elements()
1048 CS_LOCALS(r300); in r300_render_draw_elements()
1049 DBG(r300, DBG_DRAW, "r300: render_draw_elements (count: %d)\n", count); in r300_render_draw_elements()
1051 u_upload_data(r300->uploader, 0, count * 2, 4, indices, in r300_render_draw_elements()
1057 if (!r300_prepare_for_rendering(r300, in r300_render_draw_elements()
1067 r300_provoking_vertex_fixes(r300, r300render->prim)); in r300_render_draw_elements()
1089 static struct vbuf_render* r300_render_create(struct r300_context* r300) in r300_render_create() argument
1093 r300render->r300 = r300; in r300_render_create()
1111 struct draw_stage* r300_draw_stage(struct r300_context* r300) in r300_draw_stage() argument
1116 render = r300_render_create(r300); in r300_draw_stage()
1122 stage = draw_vbuf_stage(r300->draw, render); in r300_draw_stage()
1129 draw_set_render(r300->draw, render); in r300_draw_stage()
1151 struct r300_context *r300 = r300_context(util_blitter_get_pipe(blitter)); in r300_blitter_draw_rectangle() local
1152 unsigned last_sprite_coord_enable = r300->sprite_coord_enable; in r300_blitter_draw_rectangle()
1156 type == UTIL_BLITTER_ATTRIB_COLOR || !r300->draw ? 8 : 4; in r300_blitter_draw_rectangle()
1160 CS_LOCALS(r300); in r300_blitter_draw_rectangle()
1164 if ((!r300->screen->caps.has_tcl && type == UTIL_BLITTER_ATTRIB_NONE) || in r300_blitter_draw_rectangle()
1173 if (r300->skip_rendering) in r300_blitter_draw_rectangle()
1176 r300->context.bind_vertex_elements_state(&r300->context, vertex_elements_cso); in r300_blitter_draw_rectangle()
1177 r300->context.bind_vs_state(&r300->context, get_vs(blitter)); in r300_blitter_draw_rectangle()
1180 r300->sprite_coord_enable = 1; in r300_blitter_draw_rectangle()
1182 r300_update_derived_state(r300); in r300_blitter_draw_rectangle()
1185 r300->viewport_state.dirty = FALSE; in r300_blitter_draw_rectangle()
1187 if (!r300_prepare_for_rendering(r300, PREP_EMIT_STATES, NULL, dwords, 0, 0, -1)) in r300_blitter_draw_rectangle()
1190 DBG(r300, DBG_DRAW, "r300: draw_rectangle\n"); in r300_blitter_draw_rectangle()
1234 r300_mark_atom_dirty(r300, &r300->rs_state); in r300_blitter_draw_rectangle()
1235 r300_mark_atom_dirty(r300, &r300->viewport_state); in r300_blitter_draw_rectangle()
1237 r300->sprite_coord_enable = last_sprite_coord_enable; in r300_blitter_draw_rectangle()
1240 void r300_init_render_functions(struct r300_context *r300) in r300_init_render_functions() argument
1243 if (r300->screen->caps.has_tcl) { in r300_init_render_functions()
1244 r300->context.draw_vbo = r300_draw_vbo; in r300_init_render_functions()
1246 r300->context.draw_vbo = r300_swtcl_draw_vbo; in r300_init_render_functions()
1250 if (!r300->screen->caps.is_r500) in r300_init_render_functions()
1251 r300_plug_in_stencil_ref_fallback(r300); in r300_init_render_functions()