/* Tencent is pleased to support the open source community by making ncnn available. * * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * https://opensource.org/licenses/BSD-3-Clause * * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ #ifndef PYBIND11_NCNN_ALLOCATOR_H #define PYBIND11_NCNN_ALLOCATOR_H #include template class PyAllocator : public Base { public: using Base::Base; // Inherit constructors void* fastMalloc(size_t size) override { PYBIND11_OVERRIDE_PURE(void*, Base, fastMalloc, size); } void fastFree(void* ptr) override { PYBIND11_OVERRIDE_PURE(void, Base, fastFree, ptr); } }; template class PyAllocatorOther : public PyAllocator { public: using PyAllocator::PyAllocator; void* fastMalloc(size_t size) override { PYBIND11_OVERRIDE(void*, Other, fastMalloc, size); } void fastFree(void* ptr) override { PYBIND11_OVERRIDE(void, Other, fastFree, ptr); } }; #if NCNN_VULKAN template class PyVkAllocator : public Base { public: using Base::Base; // Inherit constructors void clear() override { PYBIND11_OVERRIDE(void, Base, clear, ); } ncnn::VkBufferMemory* fastMalloc(size_t size) override { PYBIND11_OVERRIDE_PURE(ncnn::VkBufferMemory*, Base, fastMalloc, size); } void fastFree(ncnn::VkBufferMemory* ptr) override { PYBIND11_OVERRIDE_PURE(void, Base, fastFree, ptr); } int flush(ncnn::VkBufferMemory* ptr) override { PYBIND11_OVERRIDE(int, Base, flush, ptr); } int invalidate(ncnn::VkBufferMemory* ptr) override { PYBIND11_OVERRIDE(int, Base, invalidate, ptr); } }; template class PyVkAllocatorOther : public PyVkAllocator { public: using PyVkAllocator::PyVkAllocator; void clear() override { PYBIND11_OVERRIDE(void, Other, clear, ); } ncnn::VkBufferMemory* fastMalloc(size_t size) override { PYBIND11_OVERRIDE(ncnn::VkBufferMemory*, Other, fastMalloc, size); } void fastFree(ncnn::VkBufferMemory* ptr) override { PYBIND11_OVERRIDE(void, Other, fastFree, ptr); } }; template class PyVkBlobAllocator : public Base { public: using Base::Base; // Inherit constructors void clear() override { PYBIND11_OVERRIDE(void, Base, clear, ); } ncnn::VkImageMemory* fastMalloc(int width, int height, VkFormat format) override { PYBIND11_OVERRIDE_PURE(ncnn::VkImageMemory*, Base, fastMalloc, width, height, format); } void fastFree(ncnn::VkImageMemory* ptr) override { PYBIND11_OVERRIDE_PURE(void, Base, fastFree, ptr); } }; //template //class PyVkImageAllocatorOther : public PyVkImageAllocator //{ //public: // using PyVkImageAllocator::PyVkImageAllocator; // ncnn::VkImageMemory* fastMalloc(int width, int height, // VkFormat format) override // { // PYBIND11_OVERRIDE(ncnn::VkImageMemory*, Other, fastMalloc, width, height, format); // } // void fastFree(ncnn::VkImageMemory* ptr) override // { // PYBIND11_OVERRIDE(void, Other, fastFree, ptr); // } //}; #endif // NCNN_VULKAN #endif