• Zebediah Figura's avatar
    wined3d: Implement a copy-on-write scheme for whole buffer uploads. · c6b9aa7a
    Zebediah Figura authored
    For discard maps on deferred contexts, we currently blit from the upload buffer
    to the resource. This is necessary because command lists can be reused and
    submitted multiple times—we cannot simply have the buffer take ownership, as for
    discard maps on immediate contexts.
    
    However, it is very common for applications to use command lists only once
    before throwing them away—in essence taking advantage of the feature only for
    the multithreading advantages it allows.
    
    Therefore we take advantage of this pattern by trying to rename the buffer
    anyway. In order to do this we introduce a refcount for BO pointers. When
    writing to a buffer BO, we first check whether the buffer "owns" the BO—i.e.
    whether it has a refcount of 1—and if not, we create a new BO for the buffer and
    copy the contents of the old BO to the new BO. That is, we perform
    mostly-transparent copy-on-write.
    
    This improves performance, and reduces CPU usage, in Assassin's Creed: Unity.
    c6b9aa7a
cs.c 157 KB