Commit f7106d16 by Cody Northrop Committed by Commit Bot

Revert "Revert "Vulkan: Use atomics in SerialFactory.""

This reverts commit 35fa85ba. Reason for revert: This commit was an innocent bystander. The bugs are intermittent, requiring multiple runs to verify. Bug: angleproject:3492 Change-Id: Idc9dcb1631cfca5fea342266c732732c6f2bd2d5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1636263 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent cc9bc655
......@@ -12,6 +12,7 @@
#include <cstdint>
#include <atomic>
#include <limits>
#include <map>
......@@ -61,8 +62,6 @@ class ResourceSerial
uintptr_t mValue;
};
class SerialFactory;
class Serial final
{
public:
......@@ -93,27 +92,32 @@ class Serial final
constexpr uint64_t getValue() const { return mValue; }
private:
friend class SerialFactory;
template <typename T>
friend class SerialFactoryBase;
constexpr explicit Serial(uint64_t value) : mValue(value) {}
uint64_t mValue;
static constexpr uint64_t kInvalid = 0;
};
class SerialFactory final : angle::NonCopyable
template <typename SerialBaseType>
class SerialFactoryBase final : angle::NonCopyable
{
public:
SerialFactory() : mSerial(1) {}
SerialFactoryBase() : mSerial(1) {}
Serial generate()
{
ASSERT(mSerial != std::numeric_limits<uint64_t>::max());
ASSERT(mSerial + 1 > mSerial);
return Serial(mSerial++);
}
private:
uint64_t mSerial;
SerialBaseType mSerial;
};
using SerialFactory = SerialFactoryBase<uint64_t>;
using AtomicSerialFactory = SerialFactoryBase<std::atomic<uint64_t>>;
using MipGenerationFunction = void (*)(size_t sourceWidth,
size_t sourceHeight,
size_t sourceDepth,
......
......@@ -192,8 +192,8 @@ class RendererVk : angle::NonCopyable
uint32_t mCurrentQueueFamilyIndex;
uint32_t mMaxVertexAttribDivisor;
VkDevice mDevice;
SerialFactory mQueueSerialFactory;
SerialFactory mShaderSerialFactory;
AtomicSerialFactory mQueueSerialFactory;
AtomicSerialFactory mShaderSerialFactory;
Serial mCurrentQueueSerial;
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