Skip to content

cso: remove cso_draw_vbo layering from all draws, call the driver or u_vbuf directly

Marek Olšák requested to merge mareko/mesa:cso-draw-callback into main

Instead of calling like this: st_draw_gallium -> cso_draw_vbo -> driver_draw_vbo/u_vbuf_draw_vbo

Do it like this: st_draw_gallium -> driver_draw_vbo

Or like this: st_draw_gallium -> u_vbuf_draw_vbo

It's accomplished by adding a draw_vbo function pointer into cso_context. The pointer is equal to pipe_context::draw_vbo when needed, so there is no call overhead from this if cso's draw_vbo callback is indeed equal to driver_draw_vbo. We just call cso_context_base::draw_vbo to jump into the driver directly, or u_vbuf if needed.

The cso function with the indirect function call is inlined, so draws don't actually visit any cso_context function.

Other commits are prerequisites.

Edited by Marek Olšák

Merge request reports