diff options
author | Marek Olšák <marek.olsak@amd.com> | 2016-12-02 15:39:25 +0100 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2016-12-14 19:03:12 +0000 |
commit | 86b8bc7656ef7fd870829121f2a6d088c5fd2516 (patch) | |
tree | 9dadbd1ce9099a27627e8056e7eef8682a37c4db | |
parent | 7c813ce14e50a48780a74bdd67ad550f8ae9ade9 (diff) | |
download | external_mesa3d-86b8bc7656ef7fd870829121f2a6d088c5fd2516.zip external_mesa3d-86b8bc7656ef7fd870829121f2a6d088c5fd2516.tar.gz external_mesa3d-86b8bc7656ef7fd870829121f2a6d088c5fd2516.tar.bz2 |
cso: don't release sampler states that are bound
This fixes random radeonsi GPU hangs in Batman Arkham: Origins (Wine) and
probably many other games too.
cso_cache deletes sampler states when the cache size is too big and doesn't
check which sampler states are bound, causing use-after-free in drivers.
Because of that, radeonsi uploaded garbage sampler states and the hardware
went bananas. Other drivers may have experienced similar issues.
Cc: 12.0 13.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
(cherry picked from commit 6dc96de303290e8d1fc294da478c4f370be98dea)
-rw-r--r-- | src/gallium/auxiliary/cso_cache/cso_cache.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/cso_cache/cso_cache.c b/src/gallium/auxiliary/cso_cache/cso_cache.c index b240c93..1f3be4b 100644 --- a/src/gallium/auxiliary/cso_cache/cso_cache.c +++ b/src/gallium/auxiliary/cso_cache/cso_cache.c @@ -188,7 +188,9 @@ cso_insert_state(struct cso_cache *sc, void *state) { struct cso_hash *hash = _cso_hash_for_type(sc, type); - sanitize_hash(sc, hash, type, sc->max_size); + + if (type != CSO_SAMPLER) + sanitize_hash(sc, hash, type, sc->max_size); return cso_hash_insert(hash, hash_key, state); } |