Commit 35fa85ba by Cody Northrop Committed by Commit Bot

Revert "Vulkan: Use atomics in SerialFactory."

This reverts commit 1b0f79ee. Reason for revert: Breaks a number of applications on Android Original change's description: > Vulkan: Use atomics in SerialFactory. > > This allows serials to be generated from multiple threads without locking for > very little/no cost. > > BUG=angleproject:2464 > > Change-Id: Id61d170e7a985c3100da0057156859ffcb083dad > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1516514 > Commit-Queue: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> TBR=geofflang@chromium.org,syoussefi@chromium.org,jmadill@chromium.org Change-Id: I52011f294d68490998869fa898e929fd41eaa51c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1636272Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
parent 6d9b8908
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include <cstdint> #include <cstdint>
#include <atomic>
#include <limits> #include <limits>
#include <map> #include <map>
...@@ -62,6 +61,8 @@ class ResourceSerial ...@@ -62,6 +61,8 @@ class ResourceSerial
uintptr_t mValue; uintptr_t mValue;
}; };
class SerialFactory;
class Serial final class Serial final
{ {
public: public:
...@@ -92,32 +93,27 @@ class Serial final ...@@ -92,32 +93,27 @@ class Serial final
constexpr uint64_t getValue() const { return mValue; } constexpr uint64_t getValue() const { return mValue; }
private: private:
template <typename T> friend class SerialFactory;
friend class SerialFactoryBase;
constexpr explicit Serial(uint64_t value) : mValue(value) {} constexpr explicit Serial(uint64_t value) : mValue(value) {}
uint64_t mValue; uint64_t mValue;
static constexpr uint64_t kInvalid = 0; static constexpr uint64_t kInvalid = 0;
}; };
template <typename SerialBaseType> class SerialFactory final : angle::NonCopyable
class SerialFactoryBase final : angle::NonCopyable
{ {
public: public:
SerialFactoryBase() : mSerial(1) {} SerialFactory() : mSerial(1) {}
Serial generate() Serial generate()
{ {
ASSERT(mSerial + 1 > mSerial); ASSERT(mSerial != std::numeric_limits<uint64_t>::max());
return Serial(mSerial++); return Serial(mSerial++);
} }
private: private:
SerialBaseType mSerial; uint64_t mSerial;
}; };
using SerialFactory = SerialFactoryBase<uint64_t>;
using AtomicSerialFactory = SerialFactoryBase<std::atomic<uint64_t>>;
using MipGenerationFunction = void (*)(size_t sourceWidth, using MipGenerationFunction = void (*)(size_t sourceWidth,
size_t sourceHeight, size_t sourceHeight,
size_t sourceDepth, size_t sourceDepth,
......
...@@ -192,8 +192,8 @@ class RendererVk : angle::NonCopyable ...@@ -192,8 +192,8 @@ class RendererVk : angle::NonCopyable
uint32_t mCurrentQueueFamilyIndex; uint32_t mCurrentQueueFamilyIndex;
uint32_t mMaxVertexAttribDivisor; uint32_t mMaxVertexAttribDivisor;
VkDevice mDevice; VkDevice mDevice;
AtomicSerialFactory mQueueSerialFactory; SerialFactory mQueueSerialFactory;
AtomicSerialFactory mShaderSerialFactory; SerialFactory mShaderSerialFactory;
Serial mCurrentQueueSerial; Serial mCurrentQueueSerial;
bool mDeviceLost; bool mDeviceLost;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment