• Nicolai Hähnle's avatar
    u_dynarray: turn util_dynarray_{grow, resize} into element-oriented macros · de8a9197
    Nicolai Hähnle authored
    The main motivation for this change is API ergonomics: most operations
    on dynarrays are really on elements, not on bytes, so it's weird to have
    grow and resize as the odd operations out.
    
    The secondary motivation is memory safety. Users of the old byte-oriented
    functions would often multiply a number of elements with the element size,
    which could overflow, and checking for overflow is tedious.
    
    With this change, we only need to implement the overflow checks once.
    The checks are cheap: since eltsize is a compile-time constant and the
    functions should be inlined, they only add a single comparison and an
    unlikely branch.
    
    v2:
    - ensure operations are no-op when allocation fails
    - in util_dynarray_clone, call resize_bytes with a compile-time constant element size
    
    v3:
    - fix iris, lima, panfrost
    Reviewed-by: 's avatarMarek Olšák <marek.olsak@amd.com>
    de8a9197