Use raw pointers for the routine const cache.
As these are touched by pixel shaders, this is extraordinarily hot code, and the cost of ref-counting by shared_ptr can really impact performance.
As the const cache is updated at well known sync points, the queryConstCache method is safe to return a raw pointer to the routine.
Bug: b/137524292
Bug: b/137649247
Change-Id: I2ae1f159467eb27b918344714cef1963f3b24a45
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/34453
Presubmit-Ready: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/src/Vulkan/VkDevice.cpp b/src/Vulkan/VkDevice.cpp
index 230d2d0..bceb001 100644
--- a/src/Vulkan/VkDevice.cpp
+++ b/src/Vulkan/VkDevice.cpp
@@ -47,9 +47,9 @@
cache.add(hash(key), routine);
}
-std::shared_ptr<rr::Routine> Device::SamplingRoutineCache::queryConst(const vk::Device::SamplingRoutineCache::Key& key) const
+rr::Routine* Device::SamplingRoutineCache::queryConst(const vk::Device::SamplingRoutineCache::Key& key) const
{
- return cache.queryConstCache(hash(key));
+ return cache.queryConstCache(hash(key)).get();
}
void Device::SamplingRoutineCache::updateConstCache()
@@ -251,7 +251,7 @@
return samplingRoutineCache.get();
}
-std::shared_ptr<rr::Routine> Device::findInConstCache(const SamplingRoutineCache::Key& key) const
+rr::Routine* Device::findInConstCache(const SamplingRoutineCache::Key& key) const
{
return samplingRoutineCache->queryConst(key);
}