diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index 808f49e..e085159 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -343,6 +343,31 @@ ${handleForwardDeclarations} ${uniqueHandles} ${handles} } // namespace VULKAN_HPP_NAMESPACE + +// operators to compare vk::-handles with nullptr +template +typename std::enable_if::value, bool>::type operator==( const T & v, std::nullptr_t ) +{ + return !v; +} + +template +typename std::enable_if::value, bool>::type operator==( std::nullptr_t, const T & v ) +{ + return !v; +} + +template +typename std::enable_if::value, bool>::type operator!=( const T & v, std::nullptr_t ) +{ + return v; +} + +template +typename std::enable_if::value, bool>::type operator!=( std::nullptr_t, const T & v ) +{ + return v; +} #endif )"; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2955ad0..a41906b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -24,6 +24,7 @@ add_subdirectory( EnableBetaExtensions ) add_subdirectory( ExtensionInspection ) add_subdirectory( Flags ) add_subdirectory( FormatTraits ) +add_subdirectory( Handles ) add_subdirectory( Hash ) add_subdirectory( NoExceptions ) add_subdirectory( StridedArrayProxy ) diff --git a/tests/Handles/CMakeLists.txt b/tests/Handles/CMakeLists.txt new file mode 100644 index 0000000..57a5796 --- /dev/null +++ b/tests/Handles/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright(c) 2023, NVIDIA CORPORATION. All rights reserved. +# +# 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. + +if( NOT VULKAN_HPP_TESTS_BUILD_ONLY_DYNAMIC ) + find_package( Vulkan REQUIRED ) + + vulkan_hpp__setup_test( NAME Handles LIBRARIES ${Vulkan_LIBRARIES} ) +endif() \ No newline at end of file diff --git a/tests/Handles/Handles.cpp b/tests/Handles/Handles.cpp new file mode 100644 index 0000000..7abb6f9 --- /dev/null +++ b/tests/Handles/Handles.cpp @@ -0,0 +1,51 @@ +// Copyright(c) 2023, NVIDIA CORPORATION. All rights reserved. +// +// 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. +// +// VulkanHpp Samples : ArrayProxy +// Compile test on using vk::ArrayProxy + +#undef VULKAN_HPP_DISPATCH_LOADER_DYNAMIC +#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 0 + +#include +#include + +int main( int /*argc*/, char ** /*argv*/ ) +{ + try + { + // test operator==() with vk-handle and nullptr + vk::Instance instance; + assert( instance == nullptr ); + assert( nullptr == instance ); + + instance = vk::createInstance( {} ); + assert( instance != nullptr ); + assert( nullptr != instance ); + + instance.destroy(); + } + catch ( vk::SystemError const & err ) + { + std::cout << "vk::SystemError: " << err.what() << std::endl; + exit( -1 ); + } + catch ( ... ) + { + std::cout << "unknown error\n"; + exit( -1 ); + } + + return 0; +} diff --git a/vulkan/vulkan_handles.hpp b/vulkan/vulkan_handles.hpp index de39d60..6cf24cc 100644 --- a/vulkan/vulkan_handles.hpp +++ b/vulkan/vulkan_handles.hpp @@ -15240,4 +15240,29 @@ namespace VULKAN_HPP_NAMESPACE #endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ } // namespace VULKAN_HPP_NAMESPACE + +// operators to compare vk::-handles with nullptr +template +typename std::enable_if::value, bool>::type operator==( const T & v, std::nullptr_t ) +{ + return !v; +} + +template +typename std::enable_if::value, bool>::type operator==( std::nullptr_t, const T & v ) +{ + return !v; +} + +template +typename std::enable_if::value, bool>::type operator!=( const T & v, std::nullptr_t ) +{ + return v; +} + +template +typename std::enable_if::value, bool>::type operator!=( std::nullptr_t, const T & v ) +{ + return v; +} #endif