• 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
Name
Last commit
Last update
dlls Loading commit data...
documentation Loading commit data...
fonts Loading commit data...
include Loading commit data...
libs Loading commit data...
loader Loading commit data...
nls Loading commit data...
po Loading commit data...
programs Loading commit data...
server Loading commit data...
tools Loading commit data...
.editorconfig Loading commit data...
.gitlab-ci.yml Loading commit data...
.mailmap Loading commit data...
ANNOUNCE Loading commit data...
AUTHORS Loading commit data...
COPYING.LIB Loading commit data...
LICENSE Loading commit data...
LICENSE.OLD Loading commit data...
MAINTAINERS Loading commit data...
README Loading commit data...
VERSION Loading commit data...
aclocal.m4 Loading commit data...
configure Loading commit data...
configure.ac Loading commit data...