diff options
Diffstat (limited to 'src/Runtime/ogl-runtime/src/foundation/FastAllocator.h')
m--------- | src/Runtime/ogl-runtime | 0 | ||||
-rw-r--r-- | src/Runtime/ogl-runtime/src/foundation/FastAllocator.h | 115 |
2 files changed, 0 insertions, 115 deletions
diff --git a/src/Runtime/ogl-runtime b/src/Runtime/ogl-runtime new file mode 160000 +Subproject 2025912174c4cf99270b7439ec3b021e1d089ae diff --git a/src/Runtime/ogl-runtime/src/foundation/FastAllocator.h b/src/Runtime/ogl-runtime/src/foundation/FastAllocator.h deleted file mode 100644 index c296bcb6..00000000 --- a/src/Runtime/ogl-runtime/src/foundation/FastAllocator.h +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 or (at your option) any later version -** approved by the KDE Free Qt Foundation. The licenses are as published by -** the Free Software Foundation and appearing in the file LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "foundation/Qt3DSAllocatorCallback.h" -#include "foundation/Qt3DSContainers.h" - -namespace qt3ds { -namespace foundation { - - /** - * Allocator that allocates slabs of a certain size and objects then - * get allocated from those slabs. This allocator is designed to reset, - * meaning every frame you can call reset and the objects get freed but - * not destructed. This allocator does not call destructors!! - */ - template <QT3DSU32 alignmentInBytes = 4, QT3DSU32 slabSize = 8192> - struct SFastAllocator : NVAllocatorCallback - { - ForwardingAllocator m_Allocator; - nvvector<QT3DSU8 *> m_Slabs; - QT3DSU32 m_Offset; - - enum { - SlabSize = slabSize, - }; - - static size_t getSlabSize() { return slabSize; } - - SFastAllocator(NVAllocatorCallback &alloc, const char *memName) - : m_Allocator(alloc, memName) - , m_Slabs(alloc, "SFastAllocator::m_Slabs") - , m_Offset(0) - { - } - - ~SFastAllocator() - { - for (QT3DSU32 idx = 0, end = m_Slabs.size(); idx < end; ++idx) - m_Allocator.deallocate(m_Slabs[idx]); - m_Slabs.clear(); - m_Offset = 0; - } - void *allocate(size_t inSize, const char *inFile, int inLine, int inFlags = 0) - { - (void)inFlags; - if (inSize > slabSize) { - QT3DS_ASSERT(false); - return NULL; - } - QT3DSU32 misalign = m_Offset % alignmentInBytes; - if (misalign) - m_Offset = m_Offset + (alignmentInBytes - misalign); - - QT3DSU32 currentSlab = m_Offset / slabSize; - QT3DSU32 slabOffset = m_Offset % slabSize; - QT3DSU32 amountLeftInSlab = slabSize - slabOffset; - if (inSize > amountLeftInSlab) { - ++currentSlab; - slabOffset = 0; - m_Offset = currentSlab * slabSize; - } - while (currentSlab >= m_Slabs.size()) { - m_Slabs.push_back((QT3DSU8 *)m_Allocator.allocate(slabSize, inFile, inLine)); - } - QT3DSU8 *data = m_Slabs[currentSlab] + slabOffset; - // This would indicate the underlying allocator isn't handing back aligned memory. - QT3DS_ASSERT(reinterpret_cast<size_t>(data) % alignmentInBytes == 0); - m_Offset += (QT3DSU32)inSize; - return data; - } - void *allocate(size_t size, const char * /*typeName*/, const char *filename, int line, - int flags = 0) override - { - return allocate(size, filename, line, flags); - } - void *allocate(size_t size, const char * /*typeName*/, const char *filename, int line, - size_t alignment, size_t /*alignmentOffset*/) override - { - QT3DS_ASSERT(alignment == alignmentInBytes); - if (alignment == alignmentInBytes) - return allocate(size, filename, line); - return NULL; - } - // only reset works with deallocation - void deallocate(void *) override {} - void reset() { m_Offset = 0; } - }; -} -} |