Skip to content
  • Nicolai Hähnle's avatar
    vbo: cache/memoize the result of vbo_get_minmax_indices (v3) · 6b057f8e
    Nicolai Hähnle authored
    
    
    Some games developers are unaware that an index buffer in a VBO still needs
    to be read by the CPU if some varying data comes from a user pointer (unless
    glDrawRangeElements and friends are used). This is particularly bad when
    they tell us that the index buffer should live in VRAM.
    
    This cache helps, e.g. lifting This War Of Mine (a particularly bad
    offender) from under 10fps to slightly over 20fps on a Carrizo.
    
    Note that there is nothing prohibiting a user from rendering from multiple
    threads simultaneously with the same index buffer, hence the locking. (The
    internal buffer map taken for the buffer still leads to a race, but at least
    the locks are a move in the right direction.)
    
    v2: disable the cache on USAGE_TEXTURE_BUFFER as well (Chris Forbes)
    
    v3:
    - use bool instead of GLboolean for MinMaxCacheDirty (Ian Romanick)
    - replace the sticky USAGE_PERSISTENT_WRITE_MAP bit by a direct
      AccessFlags check
    
    Reviewed-by: Chris Forbes <chrisf@ijw.co.nz> (v2)
    Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
    6b057f8e