8cc6205bf7
Normal behavior of ApiObjectBase's APIRelease() which only locks the device when last ref dropped is not thread safe if the object is cached as raw pointers by the device. Example of cached objects: bind group layout, pipeline, sampler, shader module. The following scenario could happen: - thread A: - shaderModuleA.APIRealease() - shaderModuleA.refCount.Decrement() == true (ref count has reached zero) - going to call shaderModuleA.LockAndDeleteThis(). - thread B: - device.CreateShaderModule(). - lock() - device.GetOrCreateShaderModule() - shaderModuleA is in the cache, so return it. - unlock() - thread A: - starting to call shaderModuleA.LockAndDeleteThis() - lock() - erase shaderModuleA from the cache. - delete shaderModuleA. - unlock() This CL disables caching when ImplicitDeviceSynchronization is turned on until we find a better solution. Bug: dawn:1769 Change-Id: Ideb2a717ece0a40e18bd1c2bef00817262bd25da Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/127900 Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com> |
||
---|---|---|
.. | ||
dawn | ||
imgs | ||
tint | ||
OWNERS | ||
building.md | ||
clang-tidy.md | ||
support.md |