Browse Source

Vk: initial seed for the magnum-vk-info utility.

pull/234/head
Vladimír Vondruš 6 years ago
parent
commit
b91e137058
  1. 5
      CMakeLists.txt
  2. 1
      doc/Doxyfile
  3. 4
      doc/building.dox
  4. 1
      doc/cmake.dox
  5. 1
      doc/utilities.dox
  6. 2
      modules/FindMagnum.cmake
  7. 1
      package/archlinux/PKGBUILD
  8. 1
      package/archlinux/PKGBUILD-clang
  9. 1
      package/archlinux/PKGBUILD-clang-addressanitizer
  10. 1
      package/archlinux/PKGBUILD-clang-analyzer
  11. 1
      package/archlinux/PKGBUILD-clang-libc++
  12. 3
      package/archlinux/PKGBUILD-coverage
  13. 2
      package/archlinux/PKGBUILD-gcc48
  14. 4
      package/archlinux/PKGBUILD-mingw-w64
  15. 2
      package/archlinux/PKGBUILD-release
  16. 1
      package/archlinux/magnum-git/PKGBUILD
  17. 1
      package/archlinux/magnum/PKGBUILD
  18. 1
      package/ci/appveyor-desktop-vulkan.bat
  19. 1
      package/ci/unix-desktop-vulkan.sh
  20. 1
      package/msys/PKGBUILD
  21. 1
      package/msys/magnum/PKGBUILD
  22. 11
      src/Magnum/Vk/CMakeLists.txt
  23. 292
      src/Magnum/Vk/vk-info.cpp

5
CMakeLists.txt

@ -77,6 +77,9 @@ option(WITH_SHADERCONVERTER "Build magnum-shaderconverter utility" OFF)
# Magnum AL Info
option(WITH_AL_INFO "Build magnum-al-info utility" OFF)
# Magnum Vk Info
option(WITH_VK_INFO "Build magnum-vk-info utility" OFF)
# Plugins
option(WITH_ANYIMAGEIMPORTER "Build AnyImageImporter plugin" OFF)
option(WITH_ANYAUDIOIMPORTER "Build AnyAudioImporter plugin" OFF)
@ -113,7 +116,7 @@ option(WITH_EGLCONTEXT "Build EglContext library" OFF)
# Vulkan, everywhere except Emscripten
if(NOT CORRADE_TARGET_EMSCRIPTEN)
option(WITH_VK "Build Vk library" OFF)
cmake_dependent_option(WITH_VK "Build Vk library" OFF "NOT WITH_VK_INFO" ON)
cmake_dependent_option(TARGET_VK "Build libraries with Vulkan interoperability" ON "WITH_VK" OFF)
endif()

1
doc/Doxyfile

@ -927,6 +927,7 @@ INPUT = ../src/Magnum \
../src/Magnum/Text/fontconverter.cpp \
../src/Magnum/TextureTools/distancefieldconverter.cpp \
../src/Magnum/Trade/imageconverter.cpp \
../src/Magnum/Vk/vk-info.cpp \
. \
../../magnum-plugins/src/Magnum \
../../magnum-plugins/src/MagnumPlugins \

4
doc/building.dox

@ -608,6 +608,10 @@ There are also a few command-line utilities, also all disabled by default:
executable, which provides information about the engine OpenGL
capabilities. Requires `TARGET_GL` to be enabled; enables building of one
of the windowless application libraries based on the target platform.
- `WITH_VK_INFO` --- Build the @ref magnum-vk-info "magnum-vk-info"
executable, which provides information about the engine Vulkan
capabilities. Requires `TARGET_VK` to be enabled; enables building of the
@ref Vk library.
- `WITH_AL_INFO` --- Build the @ref magnum-al-info "magnum-al-info"
executable, which provides information about the engine OpenAL
capabilities.

1
doc/cmake.dox

@ -275,6 +275,7 @@ Lastly, a few utility executables are available:
- `shaderconverter` --- @ref magnum-shaderconverter "magnum-shaderconverter"
executable
- `gl-info` --- @ref magnum-gl-info "magnum-gl-info" executable
- `vk-info` --- @ref magnum-vk-info "magnum-vk-info" executable
- `al-info` --- @ref magnum-al-info "magnum-al-info" executable
Note that [each namespace](namespaces.html), all @ref Platform libraries and

1
doc/utilities.dox

@ -50,6 +50,7 @@ namespace Magnum {
@section utilities-cli Command-line utilities
- @subpage magnum-gl-info @m_class{m-label m-default m-flat} **live web demo** --- @copybrief magnum-gl-info
- @subpage magnum-vk-info --- @copybrief magnum-vk-info
- @subpage magnum-al-info @m_class{m-label m-default m-flat} **live web demo** --- @copybrief magnum-al-info
- @subpage magnum-distancefieldconverter --- @copybrief magnum-distancefieldconverter
- @subpage magnum-fontconverter --- @copybrief magnum-fontconverter

2
modules/FindMagnum.cmake

@ -98,6 +98,7 @@
# sceneconverterter - magnum-sceneconverter executable
# shaderconverterter - magnum-shaderconverter executable
# gl-info - magnum-gl-info executable
# vk-info - magnum-vk-info executable
# al-info - magnum-al-info executable
#
# Example usage with specifying additional components is::
@ -372,6 +373,7 @@ set(_MAGNUM_IMPLICITLY_ENABLED_COMPONENTS
GL Primitives)
if(NOT CORRADE_TARGET_EMSCRIPTEN)
list(APPEND _MAGNUM_LIBRARY_COMPONENTS Vk)
list(APPEND _MAGNUM_EXECUTABLE_COMPONENTS vk-info)
endif()
if(NOT CORRADE_TARGET_ANDROID)
list(APPEND _MAGNUM_LIBRARY_COMPONENTS Sdl2Application)

1
package/archlinux/PKGBUILD

@ -53,6 +53,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \

1
package/archlinux/PKGBUILD-clang

@ -56,6 +56,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \

1
package/archlinux/PKGBUILD-clang-addressanitizer

@ -57,6 +57,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \

1
package/archlinux/PKGBUILD-clang-analyzer

@ -48,6 +48,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \

1
package/archlinux/PKGBUILD-clang-libc++

@ -59,6 +59,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \

3
package/archlinux/PKGBUILD-coverage

@ -54,6 +54,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \
@ -77,6 +78,8 @@ check() {
./Debug/bin/magnum-al-info > /dev/null
./Debug/bin/magnum-gl-info --limits > /dev/null
# Not calling vk-info because currently it doesn't do anything that
# wouldn't be covered elsewhere (but it causes false positives in coverage)
rm -rf coverage
mkdir coverage

2
package/archlinux/PKGBUILD-gcc48

@ -33,6 +33,7 @@ build() {
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/usr \
-DWITH_AUDIO=ON \
-DWITH_VK=ON \
-DWITH_GLFWAPPLICATION=ON \
-DWITH_GLXAPPLICATION=ON \
-DWITH_SDL2APPLICATION=ON \
@ -60,6 +61,7 @@ build() {
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_AL_INFO=ON \
-DWITH_VK_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \
-DBUILD_VK_TESTS=ON

4
package/archlinux/PKGBUILD-mingw-w64

@ -21,6 +21,7 @@ build() {
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/i686-w64-mingw32 \
-DWITH_AUDIO=ON \
-DWITH_VK=OFF \
-DWITH_SDL2APPLICATION=ON \
-DWITH_WINDOWLESSWGLAPPLICATION=ON \
-DWITH_WGLCONTEXT=ON \
@ -43,6 +44,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=OFF \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \
@ -58,6 +60,7 @@ build() {
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32 \
-DWITH_AUDIO=ON \
-DWITH_VK=OFF \
-DWITH_SDL2APPLICATION=ON \
-DWITH_WINDOWLESSWGLAPPLICATION=ON \
-DWITH_WGLCONTEXT=ON \
@ -80,6 +83,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=OFF \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \

2
package/archlinux/PKGBUILD-release

@ -48,6 +48,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \
@ -89,6 +90,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=ON \

1
package/archlinux/magnum-git/PKGBUILD

@ -50,6 +50,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON \
-G Ninja
ninja

1
package/archlinux/magnum/PKGBUILD

@ -47,6 +47,7 @@ build() {
-DWITH_TGAIMAGECONVERTER=ON \
-DWITH_TGAIMPORTER=ON \
-DWITH_VK=ON \
-DWITH_VK_INFO=ON \
-DWITH_WAVAUDIOIMPORTER=ON \
-DWITH_WINDOWLESSGLXAPPLICATION=ON \
-GNinja

1
package/ci/appveyor-desktop-vulkan.bat

@ -56,6 +56,7 @@ cmake .. ^
-DWITH_IMAGECONVERTER=OFF ^
-DWITH_SCENECONVERTER=OFF ^
-DWITH_GL_INFO=OFF ^
-DWITH_VK_INFO=ON ^
-DWITH_AL_INFO=OFF ^
-DWITH_SDL2APPLICATION=ON ^
-DWITH_GLFWAPPLICATION=ON ^

1
package/ci/unix-desktop-vulkan.sh

@ -43,6 +43,7 @@ cmake .. \
-DWITH_TRADE=ON \
-DWITH_VK=ON \
-DWITH_AL_INFO=OFF \
-DWITH_VK_INFO=ON \
-DWITH_GL_INFO=OFF \
-DWITH_ANYAUDIOIMPORTER=OFF \
-DWITH_ANYIMAGECONVERTER=OFF \

1
package/msys/PKGBUILD

@ -55,6 +55,7 @@ build() {
-DWITH_SCENECONVERTER=ON \
-DWITH_SHADERCONVERTER=ON \
-DWITH_GL_INFO=ON \
-DWITH_VK_INFO=ON \
-DWITH_AL_INFO=ON
ninja
}

1
package/msys/magnum/PKGBUILD

@ -63,6 +63,7 @@ build() {
-DWITH_TGAIMAGECONVERTER=ON \
-DWITH_TGAIMPORTER=ON \
-DWITH_VK=ON \
-DWITH_VK_INFO=ON \
-DWITH_WAVAUDIOIMPORTER=ON \
-DWITH_WINDOWLESSWGLAPPLICATION=ON \
"${extra_config[@]}" \

11
src/Magnum/Vk/CMakeLists.txt

@ -110,6 +110,17 @@ install(TARGETS MagnumVk
ARCHIVE DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR})
install(FILES ${MagnumVk_HEADERS} DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Vk)
if(WITH_VK_INFO)
add_executable(magnum-vk-info vk-info.cpp)
target_link_libraries(magnum-vk-info PRIVATE MagnumVk)
set_target_properties(magnum-vk-info PROPERTIES FOLDER "Magnum/Vk")
install(TARGETS magnum-vk-info DESTINATION ${MAGNUM_BINARY_INSTALL_DIR})
# Magnum Vk Info target alias for superprojects
add_executable(Magnum::vk-info ALIAS magnum-vk-info)
endif()
if(BUILD_TESTS)
# Library with graceful assert for testing
add_library(MagnumVkTestLib ${SHARED_OR_STATIC}

292
src/Magnum/Vk/vk-info.cpp

@ -0,0 +1,292 @@
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020 Vladimír Vondruš <mosra@centrum.cz>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
#include <Corrade/Utility/Arguments.h>
#include "Magnum/Vk/Extensions.h"
#include "Magnum/Vk/ExtensionProperties.h"
#include "Magnum/Vk/Instance.h"
#include "Magnum/Vk/LayerProperties.h"
#include "Magnum/Vk/DeviceProperties.h"
#include "Magnum/Vk/Version.h"
namespace Magnum {
/** @page magnum-vk-info Magnum Vulkan Info
@brief Displays information about Magnum engine Vulkan capabilities
@m_footernavigation
@m_keywords{magnum-vk-info vk-info}
This utility is built if both `WITH_VK` and `WITH_VK_INFO` is enabled when
building Magnum. To use this utility with CMake, you need to request the
`vk-info` component of the `Magnum` package and use the `Magnum::vk-info`
target for example in a custom command:
@code{.cmake}
find_package(Magnum REQUIRED vk-info)
add_custom_command(OUTPUT ... COMMAND Magnum::vk-info ...)
@endcode
See @ref building, @ref cmake and the @ref Vk namespace for more information.
*/
}
using namespace Magnum;
int main(int argc, char** argv) {
Utility::Arguments args;
args.addBooleanOption("extension-strings").setHelp("extension-strings", "list all extension strings provided by the driver")
.addBooleanOption("all-extensions").setHelp("all-extensions", "display extensions also for fully supported versions")
.addSkippedPrefix("magnum", "engine-specific options")
.setGlobalHelp("Displays information about Magnum engine and Vulkan capabilities.")
.parse(argc, argv);
/* Setup InstanceCreateInfo before printing anything so --magnum-help has
uncluttered output */
/** @todo add a NoCreate InstanceInfo that just populates internal state
without querying vulkan for anything? or that's stupid? */
Vk::LayerProperties layerProperties = Vk::enumerateLayerProperties();
Vk::InstanceExtensionProperties instanceExtensionProperties = Vk::enumerateInstanceExtensionProperties({layerProperties.names()});
Vk::InstanceCreateInfo instanceCreateInfo{argc, argv, &layerProperties, &instanceExtensionProperties};
Debug{} << "";
Debug{} << " +---------------------------------------------------------+";
Debug{} << " | Information about Magnum engine Vulkan capabilities |";
Debug{} << " +---------------------------------------------------------+";
Debug{} << "";
Debug{} << "Compilation flags:";
#ifdef CORRADE_BUILD_DEPRECATED
Debug{} << " CORRADE_BUILD_DEPRECATED";
#endif
#ifdef CORRADE_BUILD_STATIC
Debug{} << " CORRADE_BUILD_STATIC";
#endif
#ifdef CORRADE_BUILD_MULTITHREADED
Debug{} << " CORRADE_BUILD_MULTITHREADED";
#endif
#ifdef CORRADE_TARGET_UNIX
Debug{} << " CORRADE_TARGET_UNIX";
#endif
#ifdef CORRADE_TARGET_APPLE
Debug{} << " CORRADE_TARGET_APPLE";
#endif
#ifdef CORRADE_TARGET_IOS
Debug{} << " CORRADE_TARGET_IOS";
#endif
#ifdef CORRADE_TARGET_WINDOWS
Debug{} << " CORRADE_TARGET_WINDOWS";
#endif
#ifdef CORRADE_TARGET_WINDOWS_RT
Debug{} << " CORRADE_TARGET_WINDOWS_RT";
#endif
#ifdef CORRADE_TARGET_ANDROID
Debug{} << " CORRADE_TARGET_ANDROID";
#endif
#ifdef CORRADE_TARGET_X86
Debug{} << " CORRADE_TARGET_X86";
#endif
#ifdef CORRADE_TARGET_ARM
Debug{} << " CORRADE_TARGET_ARM";
#endif
#ifdef CORRADE_TARGET_POWERPC
Debug{} << " CORRADE_TARGET_POWERPC";
#endif
#ifdef CORRADE_TARGET_BIG_ENDIAN
Debug{} << " CORRADE_TARGET_BIG_ENDIAN";
#endif
#ifdef CORRADE_TARGET_GCC
Debug{} << " CORRADE_TARGET_GCC";
#endif
#ifdef CORRADE_TARGET_CLANG
Debug{} << " CORRADE_TARGET_CLANG";
#endif
#ifdef CORRADE_TARGET_APPLE_CLANG
Debug{} << " CORRADE_TARGET_APPLE_CLANG";
#endif
#ifdef CORRADE_TARGET_CLANG_CL
Debug{} << " CORRADE_TARGET_CLANG_CL";
#endif
#ifdef CORRADE_TARGET_MSVC
Debug{} << " CORRADE_TARGET_MSVC";
#endif
#ifdef CORRADE_TARGET_MINGW
Debug{} << " CORRADE_TARGET_MINGW";
#endif
#ifdef CORRADE_TARGET_LIBCXX
Debug{} << " CORRADE_TARGET_LIBCXX";
#endif
#ifdef CORRADE_TARGET_LIBSTDCXX
Debug{} << " CORRADE_TARGET_LIBSTDCXX";
#endif
#ifdef CORRADE_TARGET_DINKUMWARE
Debug{} << " CORRADE_TARGET_DINKUMWARE";
#endif
#ifdef CORRADE_TARGET_SSE2
Debug{} << " CORRADE_TARGET_SSE2";
#endif
#ifdef CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT
Debug{} << " CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT";
#endif
#ifdef CORRADE_TESTSUITE_TARGET_XCTEST
Debug{} << " CORRADE_TESTSUITE_TARGET_XCTEST";
#endif
#ifdef CORRADE_UTILITY_USE_ANSI_COLORS
Debug{} << " CORRADE_UTILITY_USE_ANSI_COLORS";
#endif
#ifdef MAGNUM_BUILD_DEPRECATED
Debug{} << " MAGNUM_BUILD_DEPRECATED";
#endif
#ifdef MAGNUM_BUILD_STATIC
Debug{} << " MAGNUM_BUILD_STATIC";
#endif
Debug{} << "";
const Vk::Version version = Vk::enumerateInstanceVersion();
Debug{} << "Reported instance version:" << version;
Debug{} << "Reported instance layers:";
for(UnsignedInt i = 0, max = layerProperties.count(); i != max; ++i) {
Debug{} << " " << layerProperties.name(i) << "(r" << Debug::nospace << layerProperties.revision(i) << Debug::nospace << ", written against" << layerProperties.version(i) << Debug::nospace << ")";
Debug{} << " " << layerProperties.description(i);
}
constexpr Vk::Version versions[]{
Vk::Version::Vk11,
Vk::Version::Vk12,
Vk::Version::None
};
std::size_t future = 0;
if(!args.isSet("all-extensions"))
while(versions[future] != Vk::Version::None && version >= versions[future])
++future;
/** @todo do better once implemented in format() */
using namespace Containers::Literals;
constexpr Containers::StringView sixtyfourSpaces = " "_s;
if(args.isSet("extension-strings")) {
Debug{} << "Reported instance extension strings:";
for(std::size_t i = 0, max = instanceExtensionProperties.count(); i != max; ++i) {
Debug d;
d << " " << instanceExtensionProperties.name(i) << "(r" << Debug::nospace << instanceExtensionProperties.revision(i) << Debug::nospace;
const UnsignedInt layer = instanceExtensionProperties.layer(i);
if(layer != 0)
d << ", from" << layerProperties.names()[layer - 1] << Debug::nospace;
d << ")";
}
} else for(std::size_t i = future; i != Containers::arraySize(versions); ++i) {
Containers::ArrayView<const Vk::InstanceExtension> extensions = Vk::InstanceExtension::extensions(versions[i]);
if(extensions.empty()) continue;
if(versions[i] != Vk::Version::None)
Debug{} << versions[i] << "instance extension support:";
else Debug{} << "Vendor instance extension support:";
for(const Vk::InstanceExtension& extension: extensions) {
Debug d;
d << " " << extension.string() << sixtyfourSpaces.prefix(64 - extension.string().size());
if(instanceExtensionProperties.isSupported(extension))
d << "REV." << Debug::nospace << instanceExtensionProperties.revision(extension);
else if(version >= extension.requiredVersion())
d << " -";
else
d << " n/a";
}
}
Debug{} << "";
Vk::Instance instance{instanceCreateInfo};
{
Containers::Array<Vk::DeviceProperties> devices = Vk::enumerateDevices(instance);
Debug{} << "Found" << devices.size() << "devices:";
for(Vk::DeviceProperties& device: devices) {
Debug{} << " " << device.name() << Debug::nospace << ","
<< device.apiVersion() << Debug::newline
<< " " << device.type() << Debug::nospace << ", driver"
<< Debug::packed << device.driverVersion();
}
if(devices.empty()) return 0;
}
Debug{} << "";
Vk::DeviceProperties device = Vk::pickDevice(instance);
Debug{} << "Picked device" << device.name() << Debug::newline;
Debug{} << "Reported version:" << device.apiVersion();
Vk::ExtensionProperties extensionProperties = device.enumerateExtensionProperties(layerProperties.names());
if(args.isSet("extension-strings")) {
Debug{} << "Reported extension strings:";
for(std::size_t i = 0, max = extensionProperties.count(); i != max; ++i) {
Debug d;
d << " " << extensionProperties.name(i) << "(r" << Debug::nospace << extensionProperties.revision(i) << Debug::nospace;
const UnsignedInt layer = extensionProperties.layer(i);
if(layer != 0)
d << ", from" << layerProperties.names()[layer - 1] << Debug::nospace;
d << ")";
}
} else for(std::size_t i = future; i != Containers::arraySize(versions); ++i) {
Containers::ArrayView<const Vk::Extension> extensions = Vk::Extension::extensions(versions[i]);
if(extensions.empty()) continue;
if(versions[i] != Vk::Version::None)
Debug{} << versions[i] << "extension support:";
else Debug{} << "Vendor extension support:";
for(const Vk::Extension& extension: extensions) {
Debug d;
d << " " << extension.string() << sixtyfourSpaces.prefix(64 - extension.string().size());
if(extensionProperties.isSupported(extension))
d << "REV." << Debug::nospace << extensionProperties.revision(extension);
else if(version >= extension.requiredVersion())
d << " -";
else
d << " n/a";
}
}
/* If we wanted only extension strings, exit now */
if(args.isSet("extension-strings")) return 0;
Debug{} << "Queue families:";
for(UnsignedInt i = 0; i != device.queueFamilyCount(); ++i) {
Debug{} << " " << i << Debug::nospace << ":" << device.queueFamilyFlags(i);
Debug{} << " " << device.queueFamilySize(i) << "queues";
}
}
Loading…
Cancel
Save