From 80518392d56a2ebeb9751ede06cb0150e20bdcf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20S=C3=BC=C3=9Fenbach?= Date: Mon, 3 Dec 2018 14:30:36 +0100 Subject: [PATCH] Introduced NoException test and resolved some warnings on unused parameters in the createResultValue functions. (#275) --- VulkanHppGenerator.cpp | 12 +++++-- tests/NoExceptions/CMakeLists.txt | 35 ++++++++++++++++++ tests/NoExceptions/NoExceptions.cpp | 56 +++++++++++++++++++++++++++++ vulkan/vulkan.hpp | 12 +++++-- 4 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 tests/NoExceptions/CMakeLists.txt create mode 100644 tests/NoExceptions/NoExceptions.cpp diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index 30accfa..813d736 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -582,9 +582,13 @@ const std::string resultValueHeader = R"( )"; const std::string createResultValueHeader = R"( + template + VULKAN_HPP_INLINE void ignore(T const&) {} + VULKAN_HPP_INLINE ResultValueType::type createResultValue( Result result, char const * message ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( result == Result::eSuccess ); return result; #else @@ -599,8 +603,9 @@ const std::string createResultValueHeader = R"( VULKAN_HPP_INLINE typename ResultValueType::type createResultValue( Result result, T & data, char const * message ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( result == Result::eSuccess ); - return ResultValue( result, std::move(data) ); + return ResultValue( result, std::move( data ) ); #else if ( result != Result::eSuccess ) { @@ -613,6 +618,7 @@ const std::string createResultValueHeader = R"( VULKAN_HPP_INLINE Result createResultValue( Result result, char const * message, std::initializer_list successCodes ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() ); #else if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() ) @@ -627,6 +633,7 @@ const std::string createResultValueHeader = R"( VULKAN_HPP_INLINE ResultValue createResultValue( Result result, T & data, char const * message, std::initializer_list successCodes ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() ); #else if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() ) @@ -642,8 +649,9 @@ const std::string createResultValueHeader = R"( VULKAN_HPP_INLINE typename ResultValueType>::type createResultValue( Result result, T & data, char const * message, typename UniqueHandleTraits::deleter const& deleter ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( result == Result::eSuccess ); - return ResultValue>( result, UniqueHandle(std::move(data), deleter) ); + return ResultValue>( result, UniqueHandle(std::move( data ), deleter) ); #else if ( result != Result::eSuccess ) { diff --git a/tests/NoExceptions/CMakeLists.txt b/tests/NoExceptions/CMakeLists.txt new file mode 100644 index 0000000..39e5404 --- /dev/null +++ b/tests/NoExceptions/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copyright(c) 2018, 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. + +cmake_minimum_required(VERSION 3.2) + +project(NoExceptions) + +set(HEADERS +) + +set(SOURCES + NoExceptions.cpp +) + +source_group(headers FILES ${HEADERS}) +source_group(sources FILES ${SOURCES}) + +add_executable(NoExceptions + ${HEADERS} + ${SOURCES} +) + +set_target_properties(NoExceptions PROPERTIES FOLDER "Tests") +target_link_libraries(NoExceptions "$ENV{VK_SDK_PATH}/Lib/vulkan-1.lib") diff --git a/tests/NoExceptions/NoExceptions.cpp b/tests/NoExceptions/NoExceptions.cpp new file mode 100644 index 0000000..7bff3b3 --- /dev/null +++ b/tests/NoExceptions/NoExceptions.cpp @@ -0,0 +1,56 @@ +// Copyright(c) 2018, 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 : NoExceptions +// Compile test with VULKAN_HPP_NO_EXCEPTIONS set +// Note: this is _no_ functional test!! Don't ever code this way!! + +#define VULKAN_HPP_NO_EXCEPTIONS + +#include "vulkan/vulkan.hpp" +#include + +static char const* AppName = "DeviceFunctions"; +static char const* EngineName = "Vulkan.hpp"; + +int main(int /*argc*/, char * /*argv[]*/) +{ + vk::ApplicationInfo appInfo(AppName, 1, EngineName, 1, VK_API_VERSION_1_1); + vk::UniqueInstance instance = vk::createInstanceUnique(vk::InstanceCreateInfo({}, &appInfo)).value; + std::vector physicalDevices = instance->enumeratePhysicalDevices().value; + assert(!physicalDevices.empty()); + + // get the QueueFamilyProperties of the first PhysicalDevice + std::vector queueFamilyProperties = physicalDevices[0].getQueueFamilyProperties(); + + // get the first index into queueFamiliyProperties which supports graphics + size_t graphicsQueueFamilyIndex = std::distance(queueFamilyProperties.begin(), + std::find_if(queueFamilyProperties.begin(), + queueFamilyProperties.end(), + [](vk::QueueFamilyProperties const& qfp) { return qfp.queueFlags & vk::QueueFlagBits::eGraphics; })); + assert(graphicsQueueFamilyIndex < queueFamilyProperties.size()); + + // create a UniqueDevice + float queuePriority = 0.0f; + vk::DeviceQueueCreateInfo deviceQueueCreateInfo(vk::DeviceQueueCreateFlags(), static_cast(graphicsQueueFamilyIndex), 1, &queuePriority); + vk::UniqueDevice device = physicalDevices[0].createDeviceUnique(vk::DeviceCreateInfo(vk::DeviceCreateFlags(), 1, &deviceQueueCreateInfo)).value; + + // create a UniqueCommandPool to allocate a CommandBuffer from + vk::UniqueCommandPool commandPool = device->createCommandPoolUnique(vk::CommandPoolCreateInfo(vk::CommandPoolCreateFlags(), deviceQueueCreateInfo.queueFamilyIndex)).value; + + // allocate a CommandBuffer from the CommandPool + std::vector commandBuffers = device->allocateCommandBuffersUnique(vk::CommandBufferAllocateInfo(commandPool.get(), vk::CommandBufferLevel::ePrimary, 1)).value; + + return 0; +} diff --git a/vulkan/vulkan.hpp b/vulkan/vulkan.hpp index de69a76..24b72c8 100644 --- a/vulkan/vulkan.hpp +++ b/vulkan/vulkan.hpp @@ -1019,9 +1019,13 @@ namespace VULKAN_HPP_NAMESPACE #endif }; + template + VULKAN_HPP_INLINE void ignore(T const&) {} + VULKAN_HPP_INLINE ResultValueType::type createResultValue( Result result, char const * message ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( result == Result::eSuccess ); return result; #else @@ -1036,8 +1040,9 @@ namespace VULKAN_HPP_NAMESPACE VULKAN_HPP_INLINE typename ResultValueType::type createResultValue( Result result, T & data, char const * message ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( result == Result::eSuccess ); - return ResultValue( result, std::move(data) ); + return ResultValue( result, std::move( data ) ); #else if ( result != Result::eSuccess ) { @@ -1050,6 +1055,7 @@ namespace VULKAN_HPP_NAMESPACE VULKAN_HPP_INLINE Result createResultValue( Result result, char const * message, std::initializer_list successCodes ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() ); #else if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() ) @@ -1064,6 +1070,7 @@ namespace VULKAN_HPP_NAMESPACE VULKAN_HPP_INLINE ResultValue createResultValue( Result result, T & data, char const * message, std::initializer_list successCodes ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() ); #else if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() ) @@ -1079,8 +1086,9 @@ namespace VULKAN_HPP_NAMESPACE VULKAN_HPP_INLINE typename ResultValueType>::type createResultValue( Result result, T & data, char const * message, typename UniqueHandleTraits::deleter const& deleter ) { #ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( message ); VULKAN_HPP_ASSERT( result == Result::eSuccess ); - return ResultValue>( result, UniqueHandle(std::move(data), deleter) ); + return ResultValue>( result, UniqueHandle(std::move( data ), deleter) ); #else if ( result != Result::eSuccess ) {