Revert "Implement AlignedAlloc and AlignedFree"
This reverts commit 0ac8c652c3568082ef6bcf6f3a1042a6ffad9bbb.
Reason for revert: Breaking compilation in Skia
Original change's description:
> Implement AlignedAlloc and AlignedFree
>
> This patch implements `AlignedAlloc()` and `AlignedFree()` referenced
> from `base::AlignedAlloc()` and `base::AlignedFree()` in Chromium.
>
> Bug: dawn:824
> Change-Id: Ifcd794a14be29c006e9a39323252dd6b867a30dc
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/183983
> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
> Reviewed-by: Austin Eng <enga@chromium.org>
> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
TBR=cwallez@chromium.org,jiawei.shao@intel.com,enga@chromium.org,dawn-scoped@luci-project-accounts.iam.gserviceaccount.com
Change-Id: If4f76d409ae56aa4d35b2008c12860a005d9f285
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: dawn:824
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/184601
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/dawn/common/AlignedAlloc.cpp b/src/dawn/common/AlignedAlloc.cpp
deleted file mode 100644
index 2b6160c..0000000
--- a/src/dawn/common/AlignedAlloc.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2024 The Dawn & Tint Authors
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this
-// list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the following disclaimer in the documentation
-// and/or other materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include "dawn/common/AlignedAlloc.h"
-
-#include "dawn/common/Assert.h"
-#include "dawn/common/Math.h"
-#include "dawn/common/Platform.h"
-
-namespace dawn {
-
-void* AlignedAlloc(size_t size, size_t alignment) {
- DAWN_ASSERT(size > 0);
- DAWN_ASSERT(IsPowerOfTwo(alignment));
- DAWN_ASSERT(size % alignment == 0);
-
-#if DAWN_PLATFORM_IS(WINDOWS)
- return _aligned_malloc(size, alignment);
-
-#elif DAWN_PLATFORM_IS(ANDROID)
- // Currently std::aligned_alloc() is not supported on the Android build of Chromium. Luckily,
- // memalign() on Android returns pointers which can safely be used with free(), so we can use it
- // instead.
- return memalign(alignment, size);
-
-#else
- return std::aligned_alloc(alignment, size);
-
-#endif
-}
-
-void AlignedFree(void* alignedPtr) {
-#if DAWN_PLATFORM_IS(WINDOWS)
- _aligned_free(alignedPtr);
-
-#else
- free(alignedPtr);
-
-#endif
-}
-
-} // namespace dawn
diff --git a/src/dawn/common/AlignedAlloc.h b/src/dawn/common/AlignedAlloc.h
deleted file mode 100644
index 9dfe0ba..0000000
--- a/src/dawn/common/AlignedAlloc.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2024 The Dawn & Tint Authors
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this
-// list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the following disclaimer in the documentation
-// and/or other materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef SRC_DAWN_COMMON_ALIGNED_ALLOC_H_
-#define SRC_DAWN_COMMON_ALIGNED_ALLOC_H_
-
-#include <cstdlib>
-
-namespace dawn {
-
-// The implementations of dawn::AlignedAlloc() and dawn::AlignedFree() are referenced from
-// base::AlignedAlloc() and base::AlignedFree() in Chromium (in `base/memory/aligned_memory.h`).
-//
-// In Dawn, a runtime sized aligned allocation can be created:
-//
-// float* my_array = static_cast<float*>(AlignedAlloc(size, alignment));
-// CHECK(reinterpret_cast<uintptr_t>(my_array) % alignment == 0);
-// memset(my_array, 0, size); // fills entire object.
-//
-// // ... later, to release the memory:
-// AlignedFree(my_array);
-//
-// Or using unique_ptr:
-//
-// std::unique_ptr<float, AlignedFreeDeleter> my_array(
-// static_cast<float*>(AlignedAlloc(size, alignment)));
-
-// Allocate memory of size `size` aligned to `alignment`.
-// The `alignment` parameter must be an integer power of 2.
-// The `size` parameter must be an integral multiple of `alignment`.
-// Note that the memory allocated by `dawn::AlignedAlloc()` can only be deallocated by
-// `dawn::AlignedFree()` otherwise on Windows the aligned memory may not be reclaimed correctly.
-void* AlignedAlloc(size_t size, size_t alignment);
-
-// Deallocate memory allocated by `AlignedAlloc`.
-void AlignedFree(void* alignedPtr);
-
-// Deleter for use with unique_ptr. E.g., use as
-// std::unique_ptr<Foo, dawn::AlignedFreeDeleter> foo;
-struct AlignedFreeDeleter {
- inline void operator()(void* ptr) const { AlignedFree(ptr); }
-};
-
-} // namespace dawn
-
-#endif // SRC_DAWN_COMMON_ALIGNED_ALLOC_H_
diff --git a/src/dawn/common/BUILD.gn b/src/dawn/common/BUILD.gn
index 094e737..aa6eecd 100644
--- a/src/dawn/common/BUILD.gn
+++ b/src/dawn/common/BUILD.gn
@@ -239,8 +239,6 @@
is_ios) {
static_library("common") {
sources = [
- "AlignedAlloc.cpp",
- "AlignedAlloc.h",
"Alloc.h",
"Assert.cpp",
"Assert.h",
diff --git a/src/dawn/common/CMakeLists.txt b/src/dawn/common/CMakeLists.txt
index 37f7e66..477ed12 100644
--- a/src/dawn/common/CMakeLists.txt
+++ b/src/dawn/common/CMakeLists.txt
@@ -46,8 +46,6 @@
target_sources(dawn_common PRIVATE
${DAWN_VERSION_AUTOGEN_SOURCES}
${DAWN_GPU_INFO_AUTOGEN_SOURCES}
- "AlignedAlloc.cpp"
- "AlignedAlloc.h"
"Alloc.h"
"Assert.cpp"
"Assert.h"
diff --git a/src/dawn/common/SlabAllocator.cpp b/src/dawn/common/SlabAllocator.cpp
index f668f37..3f095d6 100644
--- a/src/dawn/common/SlabAllocator.cpp
+++ b/src/dawn/common/SlabAllocator.cpp
@@ -31,7 +31,6 @@
#include <cstdlib>
#include <limits>
#include <new>
-#include "dawn/common/AlignedAlloc.h"
#include "dawn/common/Assert.h"
#include "dawn/common/Math.h"
@@ -63,7 +62,7 @@
DAWN_ASSERT(slab->blocksInUse == 0);
char* allocation = slab->allocation;
slab->~Slab(); // Placement delete.
- AlignedFree(allocation);
+ delete[] allocation;
}
}
@@ -80,7 +79,12 @@
mIndexLinkNodeOffset(Align(objectSize, alignof(IndexLinkNode))),
mBlockStride(Align(mIndexLinkNodeOffset + u32_sizeof<IndexLinkNode>, objectAlignment)),
mBlocksPerSlab(blocksPerSlab),
- mTotalAllocationSize(static_cast<size_t>(mSlabBlocksOffset) + mBlocksPerSlab * mBlockStride) {
+ mTotalAllocationSize(
+ // required allocation size
+ static_cast<size_t>(mSlabBlocksOffset) + mBlocksPerSlab * mBlockStride +
+ // Pad the allocation size by mAllocationAlignment so that the aligned allocation still
+ // fulfills the required size.
+ mAllocationAlignment) {
DAWN_ASSERT(IsPowerOfTwo(mAllocationAlignment));
}
@@ -228,7 +232,10 @@
return;
}
- char* alignedPtr = static_cast<char*>(AlignedAlloc(mTotalAllocationSize, mAllocationAlignment));
+ // TODO(crbug.com/dawn/824): Use aligned_alloc when possible. It should be available with
+ // C++17 but on macOS it also requires macOS 10.15 to work.
+ char* allocation = new char[mTotalAllocationSize];
+ char* alignedPtr = AlignPtr(allocation, mAllocationAlignment);
char* dataStart = alignedPtr + mSlabBlocksOffset;
@@ -240,7 +247,7 @@
IndexLinkNode* lastNode = OffsetFrom(node, mBlocksPerSlab - 1);
lastNode->nextIndex = kInvalidIndex;
- mAvailableSlabs.Prepend(new (alignedPtr) Slab(alignedPtr, node));
+ mAvailableSlabs.Prepend(new (alignedPtr) Slab(allocation, node));
}
} // namespace dawn