Freedreno

class fd_batch {
    seqno : int
    idx : int
    num_draws : int
    num_vertices : int
    num_bins_per_pipe
    prim_strm_bits
    draw_strm_bits

    draw : draw pass cmdstream
    binning: binning pass cmdstream
    gmem : tiling/gmem(IB0) cmdstream

    fd_batch_create()
    _flush()
    _add_dep()
    _resource_write()
    _resource_read_slowpath()
    _check_size()
    _describe()
    _destroy()

}

fd_context --|> pipe_context
pipe_context --|> pipe_screen

class pipe_context {
    .draw_vbo
    .flush
    .emit_string_marker
}

class fd_context {
    draw_vbo : fd5_draw_vbo
    clear : fd5_clear

    emit_tile_init
    emit_tile_prep
    emit_tile_mem2gmem
    emit_tile_renderprep
    emit_tile
    emit_tile_gmem2mem
    emit_tile_fini
    emit_system_prep
    emit_system_fini

}
fd5_draw.c -> fd5_draw.c++: fd3_draw_vbo()
fd5_draw.c -> fd5_draw.c++ : draw_impl()
fd5_draw.c -> freedreno_draw.h : fd5_draw_emit()
render_tiles()
    emit_tile_init
    for_each_bin:
        emit_tile_prep
        (restore?)emit_tile_mem2gmem
        emit_tile_renderprep
        emit_tile
        emit_tile_gmem2mem
    emit_tile_fini


fd_gmem_render_tiles
    if(sysmem) 
        render_sysmem
    else
        render_tiles
    flush_ring

batch_flush
    fd_fence_ref(batch->fence)
    fd_gmem_render_tiles
    batch_reset_resources(batch)
    fd_bc_invalidate_batch

fd_batch_flush
    fd_batch_reference
    batch_flush
    ~fd_batch_reference


fd_draw_fbo -> 
    batch_draw_tracking -> 
        resource_written -> 
            fd_batch_resource_write -> 
                flush_write_batch -> 
                    fd_batch_flush
fd_launch_grid -> fd_batch_flush (compute shading)


fd_gmem_render_tiles()


util_draw_indirect
    for_each_draw_call
        pipe->draw_vbo(info)


st_draw_vbo (st_draw.c state_tracker)
    for_each_mesa_prims
        pipe->draw_vbo


kernel code:
rgmu_irq_handler
oob_irq_handler
hfi_irq_handler
adreno_irq_handler
kgsl_irq_hnadler