summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/common/MemoryBuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/common/MemoryBuffer.h')
-rw-r--r--src/3rdparty/angle/src/common/MemoryBuffer.h55
1 files changed, 47 insertions, 8 deletions
diff --git a/src/3rdparty/angle/src/common/MemoryBuffer.h b/src/3rdparty/angle/src/common/MemoryBuffer.h
index ec621cbca7..f76b9ee62e 100644
--- a/src/3rdparty/angle/src/common/MemoryBuffer.h
+++ b/src/3rdparty/angle/src/common/MemoryBuffer.h
@@ -7,32 +7,71 @@
#ifndef COMMON_MEMORYBUFFER_H_
#define COMMON_MEMORYBUFFER_H_
+#include "common/Optional.h"
#include "common/angleutils.h"
+#include "common/debug.h"
-#include <cstddef>
#include <stdint.h>
+#include <cstddef>
-namespace rx
+namespace angle
{
-class MemoryBuffer : angle::NonCopyable
+class MemoryBuffer final : NonCopyable
{
public:
MemoryBuffer();
~MemoryBuffer();
+ MemoryBuffer(MemoryBuffer &&other);
+ MemoryBuffer &operator=(MemoryBuffer &&other);
+
bool resize(size_t size);
- size_t size() const;
+ size_t size() const { return mSize; }
bool empty() const { return mSize == 0; }
- const uint8_t *data() const;
- uint8_t *data();
+ const uint8_t *data() const { return mData; }
+ uint8_t *data()
+ {
+ ASSERT(mData);
+ return mData;
+ }
+
+ void fill(uint8_t datum);
private:
size_t mSize;
uint8_t *mData;
};
-}
+class ScratchBuffer final : NonCopyable
+{
+ public:
+ // If we request a scratch buffer requesting a smaller size this many times, release and
+ // recreate the scratch buffer. This ensures we don't have a degenerate case where we are stuck
+ // hogging memory.
+ ScratchBuffer(uint32_t lifetime);
+ ~ScratchBuffer();
+
+ // Returns true with a memory buffer of the requested size, or false on failure.
+ bool get(size_t requestedSize, MemoryBuffer **memoryBufferOut);
+
+ // Same as get, but ensures new values are initialized to a fixed constant.
+ bool getInitialized(size_t requestedSize, MemoryBuffer **memoryBufferOut, uint8_t initValue);
+
+ // Ticks the release counter for the scratch buffer. Also done implicitly in get().
+ void tick();
+
+ void clear();
+
+ private:
+ bool getImpl(size_t requestedSize, MemoryBuffer **memoryBufferOut, Optional<uint8_t> initValue);
+
+ const uint32_t mLifetime;
+ uint32_t mResetCounter;
+ MemoryBuffer mScratchMemory;
+};
+
+} // namespace angle
-#endif // COMMON_MEMORYBUFFER_H_
+#endif // COMMON_MEMORYBUFFER_H_