/* * SPDX-FileCopyrightText: Copyright (c) 1993-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 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. */ #include "NvInfer.h" #include "NvInferPlugin.h" #include "common/checkMacrosPlugin.h" #include "common/plugin.h" #include "roiAlignPlugin/roiAlignPlugin.h" #include "cropAndResizePlugin/cropAndResizePlugin.h" #include "decodeBbox3DPlugin/decodeBbox3D.h" #include "detectionLayerPlugin/detectionLayerPlugin.h" #include "efficientNMSPlugin/efficientNMSPlugin.h" #include "efficientNMSPlugin/tftrt/efficientNMSExplicitTFTRTPlugin.h" #include "efficientNMSPlugin/tftrt/efficientNMSImplicitTFTRTPlugin.h" #include "flattenConcat/flattenConcat.h" #include "generateDetectionPlugin/generateDetectionPlugin.h" #include "gridAnchorPlugin/gridAnchorPlugin.h" #include "instanceNormalizationPlugin/instanceNormalizationPlugin.h" #include "instanceNormalizationPlugin/instanceNormalizationPluginLegacy.h" #include "modulatedDeformConvPlugin/modulatedDeformConvPlugin.h" #include "modulatedDeformConvPlugin/modulatedDeformConvPluginLegacy.h" #include "multilevelCropAndResizePlugin/multilevelCropAndResizePlugin.h" #include "multilevelProposeROI/multilevelProposeROIPlugin.h" #include "multiscaleDeformableAttnPlugin/multiscaleDeformableAttnPlugin.h" #include "multiscaleDeformableAttnPlugin/multiscaleDeformableAttnPluginLegacy.h" #include "nvFasterRCNN/nvFasterRCNNPlugin.h" #include "pillarScatterPlugin/pillarScatter.h" #include "priorBoxPlugin/priorBoxPlugin.h" #include "proposalLayerPlugin/proposalLayerPlugin.h" #include "pyramidROIAlignPlugin/pyramidROIAlignPlugin.h" #include "regionPlugin/regionPlugin.h" #include "reorgPlugin/reorgPlugin.h" #include "resizeNearestPlugin/resizeNearestPlugin.h" #include "roiAlignPlugin/roiAlignPlugin.h" #include "roiAlignPlugin/roiAlignPluginLegacy.h" #include "scatterElementsPlugin/scatterElementsPlugin.h" #include "scatterElementsPlugin/scatterElementsPluginLegacy.h" #include "scatterPlugin/scatterPlugin.h" #include "topkLastDimPlugin/topkLastDimPlugin.h" #include "voxelGeneratorPlugin/voxelGenerator.h" #include #include #include #include #include #include #include using namespace nvinfer1; using namespace nvinfer1::plugin; using namespace nvinfer1::pluginInternal; using nvinfer1::plugin::RPROIParams; namespace nvinfer1::plugin { extern ILogger* gLogger; } // namespace nvinfer1::plugin namespace { // This singleton ensures that each plugin is only registered once for a given // namespace and type, and attempts of duplicate registration are ignored. class PluginCreatorRegistry { public: static PluginCreatorRegistry& getInstance() { static PluginCreatorRegistry instance; return instance; } template void addPluginCreator(void* logger, char const* libNamespace) { // Make accesses to the plugin creator registry thread safe std::lock_guard lock(mRegistryLock); std::string errorMsg; std::string verboseMsg; std::unique_ptr pluginCreator{new CreatorType{}}; pluginCreator->setPluginNamespace(libNamespace); nvinfer1::plugin::gLogger = static_cast(logger); std::string pluginType = std::string{pluginCreator->getPluginNamespace()} + "::" + std::string{pluginCreator->getPluginName()} + " version " + std::string{pluginCreator->getPluginVersion()}; if (mRegistryList.find(pluginType) == mRegistryList.end()) { bool status = getPluginRegistry()->registerCreator(*pluginCreator, libNamespace); if (status) { mRegistry.push(std::move(pluginCreator)); mRegistryList.insert(pluginType); verboseMsg = "Registered plugin creator - " + pluginType; } else { errorMsg = "Could not register plugin creator - " + pluginType; } } else { verboseMsg = "Plugin creator already registered - " + pluginType; } if (logger) { if (!errorMsg.empty()) { nvinfer1::plugin::gLogger->log(ILogger::Severity::kERROR, errorMsg.c_str()); } if (!verboseMsg.empty()) { nvinfer1::plugin::gLogger->log(ILogger::Severity::kVERBOSE, verboseMsg.c_str()); } } } ~PluginCreatorRegistry() { std::lock_guard lock(mRegistryLock); // Release pluginCreators in LIFO order of registration. while (!mRegistry.empty()) { mRegistry.pop(); } mRegistryList.clear(); } private: PluginCreatorRegistry() {} std::mutex mRegistryLock; std::stack> mRegistry; std::unordered_set mRegistryList; public: PluginCreatorRegistry(PluginCreatorRegistry const&) = delete; void operator=(PluginCreatorRegistry const&) = delete; }; template void initializePlugin(void* logger, char const* libNamespace) { PluginCreatorRegistry::getInstance().addPluginCreator(logger, libNamespace); } } // namespace // New Plugin APIs extern "C" { bool initLibNvInferPlugins(void* logger, char const* libNamespace) { initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); initializePlugin(logger, libNamespace); return true; } } // extern "C"