void ilo_render_emit_draw_surface_states(struct ilo_render *render, const struct ilo_state_vector *vec, struct ilo_render_draw_session *session) { const unsigned surface_used = ilo_builder_surface_used(render->builder); int shader_type; ILO_DEV_ASSERT(render->dev, 6, 7.5); /* * upload all SURAFCE_STATEs together so that we know there are minimal * paddings */ gen6_emit_draw_surface_rt(render, vec, session); if (ilo_dev_gen(render->dev) == ILO_GEN(6)) gen6_emit_draw_surface_so(render, vec, session); for (shader_type = 0; shader_type < PIPE_SHADER_TYPES; shader_type++) { gen6_emit_draw_surface_view(render, vec, shader_type, session); gen6_emit_draw_surface_const(render, vec, shader_type, session); } /* this must be called after all SURFACE_STATEs have been uploaded */ for (shader_type = 0; shader_type < PIPE_SHADER_TYPES; shader_type++) { gen6_emit_draw_surface_binding_tables(render, vec, shader_type, session); } assert(ilo_builder_surface_used(render->builder) <= surface_used + ilo_render_get_draw_surface_states_len(render, vec)); }
int ilo_render_get_draw_len(const struct ilo_render *render, const struct ilo_state_vector *vec) { ILO_DEV_ASSERT(render->dev, 6, 8); return ilo_render_get_draw_dynamic_states_len(render, vec) + ilo_render_get_draw_surface_states_len(render, vec) + ilo_render_get_draw_commands_len(render, vec); }