Browse Source

Vk: use the new VulkanTester in Device tests.

It's there only to create the instance right now. Not using it to test
instance-level functionality right now as we'd be only working around it
anyway.
pull/234/head
Vladimír Vondruš 6 years ago
parent
commit
4b499049f0
  1. 4
      src/Magnum/Vk/Test/CMakeLists.txt
  2. 52
      src/Magnum/Vk/Test/DevicePropertiesVkTest.cpp
  3. 66
      src/Magnum/Vk/Test/DeviceVkTest.cpp

4
src/Magnum/Vk/Test/CMakeLists.txt

@ -37,8 +37,8 @@ corrade_add_test(VkResultTest ResultTest.cpp LIBRARIES MagnumVk)
corrade_add_test(VkVersionTest VersionTest.cpp LIBRARIES MagnumVk) corrade_add_test(VkVersionTest VersionTest.cpp LIBRARIES MagnumVk)
if(BUILD_VK_TESTS) if(BUILD_VK_TESTS)
corrade_add_test(VkDeviceVkTest DeviceVkTest.cpp LIBRARIES MagnumVkTestLib) corrade_add_test(VkDeviceVkTest DeviceVkTest.cpp LIBRARIES MagnumVkTestLib MagnumVulkanTester)
corrade_add_test(VkDevicePropertiesVkTest DevicePropertiesVkTest.cpp LIBRARIES MagnumVkTestLib) corrade_add_test(VkDevicePropertiesVkTest DevicePropertiesVkTest.cpp LIBRARIES MagnumVkTestLib MagnumVulkanTester)
corrade_add_test(VkExtensionPropertiesVkTest ExtensionPropertiesVkTest.cpp LIBRARIES MagnumVkTestLib) corrade_add_test(VkExtensionPropertiesVkTest ExtensionPropertiesVkTest.cpp LIBRARIES MagnumVkTestLib)
corrade_add_test(VkLayerPropertiesVkTest LayerPropertiesVkTest.cpp LIBRARIES MagnumVkTestLib) corrade_add_test(VkLayerPropertiesVkTest LayerPropertiesVkTest.cpp LIBRARIES MagnumVkTestLib)
corrade_add_test(VkInstanceVkTest InstanceVkTest.cpp LIBRARIES MagnumVk) corrade_add_test(VkInstanceVkTest InstanceVkTest.cpp LIBRARIES MagnumVk)

52
src/Magnum/Vk/Test/DevicePropertiesVkTest.cpp

@ -28,7 +28,6 @@
#include <Corrade/Containers/Optional.h> #include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/StringStl.h> #include <Corrade/Containers/StringStl.h>
#include <Corrade/Containers/StringView.h> #include <Corrade/Containers/StringView.h>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/TestSuite/Compare/Numeric.h> #include <Corrade/TestSuite/Compare/Numeric.h>
#include <Corrade/Utility/DebugStl.h> #include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/FormatStl.h> #include <Corrade/Utility/FormatStl.h>
@ -40,10 +39,11 @@
#include "Magnum/Vk/LayerProperties.h" #include "Magnum/Vk/LayerProperties.h"
#include "Magnum/Vk/Result.h" #include "Magnum/Vk/Result.h"
#include "Magnum/Vk/Version.h" #include "Magnum/Vk/Version.h"
#include "Magnum/Vk/VulkanTester.h"
namespace Magnum { namespace Vk { namespace Test { namespace { namespace Magnum { namespace Vk { namespace Test { namespace {
struct DevicePropertiesVkTest: TestSuite::Tester { struct DevicePropertiesVkTest: VulkanTester {
explicit DevicePropertiesVkTest(); explicit DevicePropertiesVkTest();
void enumerate(); void enumerate();
@ -69,8 +69,6 @@ struct DevicePropertiesVkTest: TestSuite::Tester {
void pickDeviceIndex(); void pickDeviceIndex();
void pickDeviceType(); void pickDeviceType();
void pickDeviceError(); void pickDeviceError();
Instance _instance;
}; };
const struct { const struct {
@ -86,7 +84,7 @@ const struct {
"Vk::tryPickDevice(): unknown Vulkan device type FAST\n"} "Vk::tryPickDevice(): unknown Vulkan device type FAST\n"}
}; };
DevicePropertiesVkTest::DevicePropertiesVkTest(): _instance{InstanceCreateInfo{arguments().first, arguments().second}} { DevicePropertiesVkTest::DevicePropertiesVkTest(): VulkanTester{NoCreate} {
addTests({&DevicePropertiesVkTest::enumerate, addTests({&DevicePropertiesVkTest::enumerate,
&DevicePropertiesVkTest::constructMove, &DevicePropertiesVkTest::constructMove,
&DevicePropertiesVkTest::wrap, &DevicePropertiesVkTest::wrap,
@ -113,7 +111,7 @@ DevicePropertiesVkTest::DevicePropertiesVkTest(): _instance{InstanceCreateInfo{a
} }
void DevicePropertiesVkTest::enumerate() { void DevicePropertiesVkTest::enumerate() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
Debug{} << "Found" << devices.size() << "devices"; Debug{} << "Found" << devices.size() << "devices";
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
@ -131,7 +129,7 @@ void DevicePropertiesVkTest::enumerate() {
} }
void DevicePropertiesVkTest::constructMove() { void DevicePropertiesVkTest::constructMove() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
VkPhysicalDevice handle = devices[0].handle(); VkPhysicalDevice handle = devices[0].handle();
Containers::StringView name = devices[0].name(); Containers::StringView name = devices[0].name();
@ -140,7 +138,7 @@ void DevicePropertiesVkTest::constructMove() {
CORRADE_COMPARE(a.handle(), handle); CORRADE_COMPARE(a.handle(), handle);
CORRADE_COMPARE(a.name(), name); CORRADE_COMPARE(a.name(), name);
DeviceProperties b = DeviceProperties::wrap(_instance, nullptr); DeviceProperties b = DeviceProperties::wrap(instance(), nullptr);
b = std::move(a); b = std::move(a);
CORRADE_COMPARE(b.handle(), handle); CORRADE_COMPARE(b.handle(), handle);
CORRADE_COMPARE(b.name(), name); CORRADE_COMPARE(b.name(), name);
@ -152,22 +150,22 @@ void DevicePropertiesVkTest::constructMove() {
void DevicePropertiesVkTest::wrap() { void DevicePropertiesVkTest::wrap() {
VkPhysicalDevice handle; VkPhysicalDevice handle;
UnsignedInt count = 1; UnsignedInt count = 1;
auto result = Result(_instance->EnumeratePhysicalDevices(_instance, &count, &handle)); auto result = Result(instance()->EnumeratePhysicalDevices(instance(), &count, &handle));
{ {
/** @todo clean up once Compare::AnyOf exists */ /** @todo clean up once Compare::AnyOf exists */
CORRADE_ITERATION(result); CORRADE_ITERATION(result);
CORRADE_VERIFY(result == Result::Success || result == Result::Incomplete); CORRADE_VERIFY(result == Result::Success || result == Result::Incomplete);
} }
DeviceProperties wrapped = DeviceProperties::wrap(_instance, handle); DeviceProperties wrapped = DeviceProperties::wrap(instance(), handle);
CORRADE_VERIFY(wrapped.handle()); CORRADE_VERIFY(wrapped.handle());
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_COMPARE(wrapped.name(), devices[0].name()); CORRADE_COMPARE(wrapped.name(), devices[0].name());
} }
void DevicePropertiesVkTest::enumerateExtensions() { void DevicePropertiesVkTest::enumerateExtensions() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
ExtensionProperties properties = devices[0].enumerateExtensionProperties(); ExtensionProperties properties = devices[0].enumerateExtensionProperties();
@ -188,7 +186,7 @@ void DevicePropertiesVkTest::enumerateExtensionsWithKhronosValidationLayer() {
if(!enumerateLayerProperties().isSupported("VK_LAYER_KHRONOS_validation")) if(!enumerateLayerProperties().isSupported("VK_LAYER_KHRONOS_validation"))
CORRADE_SKIP("VK_LAYER_KHRONOS_validation not supported, can't test"); CORRADE_SKIP("VK_LAYER_KHRONOS_validation not supported, can't test");
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
/* There should be more extensions with this layer enabled */ /* There should be more extensions with this layer enabled */
@ -213,7 +211,7 @@ void DevicePropertiesVkTest::enumerateExtensionsNonexistentLayer() {
} }
void DevicePropertiesVkTest::extensionConstructMove() { void DevicePropertiesVkTest::extensionConstructMove() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
ExtensionProperties a = devices[0].enumerateExtensionProperties(); ExtensionProperties a = devices[0].enumerateExtensionProperties();
@ -232,7 +230,7 @@ void DevicePropertiesVkTest::extensionConstructMove() {
} }
void DevicePropertiesVkTest::extensionIsSupported() { void DevicePropertiesVkTest::extensionIsSupported() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
ExtensionProperties properties = devices[0].enumerateExtensionProperties(); ExtensionProperties properties = devices[0].enumerateExtensionProperties();
@ -247,7 +245,7 @@ void DevicePropertiesVkTest::extensionIsSupported() {
} }
void DevicePropertiesVkTest::extensionNamedRevision() { void DevicePropertiesVkTest::extensionNamedRevision() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
ExtensionProperties properties = devices[0].enumerateExtensionProperties(); ExtensionProperties properties = devices[0].enumerateExtensionProperties();
@ -265,7 +263,7 @@ void DevicePropertiesVkTest::extensionNamedRevision() {
} }
void DevicePropertiesVkTest::queueFamilies() { void DevicePropertiesVkTest::queueFamilies() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
Debug{} << "Available queue family count:" << devices[0].queueFamilyCount(); Debug{} << "Available queue family count:" << devices[0].queueFamilyCount();
@ -287,7 +285,7 @@ void DevicePropertiesVkTest::queueFamilies() {
} }
void DevicePropertiesVkTest::queueFamiliesOutOfRange() { void DevicePropertiesVkTest::queueFamiliesOutOfRange() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
const UnsignedInt count = devices[0].queueFamilyCount(); const UnsignedInt count = devices[0].queueFamilyCount();
@ -302,7 +300,7 @@ void DevicePropertiesVkTest::queueFamiliesOutOfRange() {
} }
void DevicePropertiesVkTest::queueFamiliesPick() { void DevicePropertiesVkTest::queueFamiliesPick() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
Containers::Optional<UnsignedInt> id = devices[0].tryPickQueueFamily(QueueFlag::Compute|QueueFlag::Graphics); Containers::Optional<UnsignedInt> id = devices[0].tryPickQueueFamily(QueueFlag::Compute|QueueFlag::Graphics);
@ -317,7 +315,7 @@ void DevicePropertiesVkTest::queueFamiliesPick() {
} }
void DevicePropertiesVkTest::queueFamiliesPickFailed() { void DevicePropertiesVkTest::queueFamiliesPickFailed() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
std::ostringstream out; std::ostringstream out;
@ -329,12 +327,12 @@ void DevicePropertiesVkTest::queueFamiliesPickFailed() {
void DevicePropertiesVkTest::pickDevice() { void DevicePropertiesVkTest::pickDevice() {
/* Default behavior */ /* Default behavior */
Containers::Optional<DeviceProperties> device = tryPickDevice(_instance); Containers::Optional<DeviceProperties> device = tryPickDevice(instance());
CORRADE_VERIFY(device); CORRADE_VERIFY(device);
} }
void DevicePropertiesVkTest::pickDeviceIndex() { void DevicePropertiesVkTest::pickDeviceIndex() {
Containers::Array<DeviceProperties> devices = enumerateDevices(_instance); Containers::Array<DeviceProperties> devices = enumerateDevices(instance());
CORRADE_VERIFY(!devices.empty()); CORRADE_VERIFY(!devices.empty());
/* Pick the last one */ /* Pick the last one */
@ -353,9 +351,9 @@ void DevicePropertiesVkTest::pickDeviceType() {
const char* argv[] {"", "--magnum-device", "cpu"}; const char* argv[] {"", "--magnum-device", "cpu"};
/* Creating a dedicated instance so we can pass custom args */ /* Creating a dedicated instance so we can pass custom args */
Instance instance{InstanceCreateInfo{Int(Containers::arraySize(argv)), argv}}; Instance instance2{InstanceCreateInfo{Int(Containers::arraySize(argv)), argv}};
Containers::Optional<DeviceProperties> device = tryPickDevice(instance); Containers::Optional<DeviceProperties> device = tryPickDevice(instance2);
if(!device) CORRADE_SKIP("No CPU device found."); if(!device) CORRADE_SKIP("No CPU device found.");
CORRADE_VERIFY(device->type() == DeviceType::Cpu); CORRADE_VERIFY(device->type() == DeviceType::Cpu);
@ -366,12 +364,12 @@ void DevicePropertiesVkTest::pickDeviceError() {
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
/* Creating a dedicated instance so we can pass custom args */ /* Creating a dedicated instance so we can pass custom args */
Instance instance{InstanceCreateInfo{Int(data.args.size()), const_cast<const char**>(data.args.data())}}; Instance instance2{InstanceCreateInfo{Int(data.args.size()), const_cast<const char**>(data.args.data())}};
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
CORRADE_VERIFY(!tryPickDevice(instance)); CORRADE_VERIFY(!tryPickDevice(instance2));
CORRADE_COMPARE(out.str(), Utility::formatString(data.message, enumerateDevices(_instance).size())); CORRADE_COMPARE(out.str(), Utility::formatString(data.message, enumerateDevices(instance2).size()));
} }
}}}} }}}}

66
src/Magnum/Vk/Test/DeviceVkTest.cpp

@ -25,7 +25,6 @@
#include <sstream> #include <sstream>
#include <Corrade/Containers/StringStl.h> #include <Corrade/Containers/StringStl.h>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/TestSuite/Compare/Numeric.h> #include <Corrade/TestSuite/Compare/Numeric.h>
#include <Corrade/Utility/DebugStl.h> #include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/FormatStl.h> #include <Corrade/Utility/FormatStl.h>
@ -40,12 +39,13 @@
#include "Magnum/Vk/Queue.h" #include "Magnum/Vk/Queue.h"
#include "Magnum/Vk/Result.h" #include "Magnum/Vk/Result.h"
#include "Magnum/Vk/Version.h" #include "Magnum/Vk/Version.h"
#include "Magnum/Vk/VulkanTester.h"
#include "MagnumExternal/Vulkan/flextVkGlobal.h" #include "MagnumExternal/Vulkan/flextVkGlobal.h"
namespace Magnum { namespace Vk { namespace Test { namespace { namespace Magnum { namespace Vk { namespace Test { namespace {
struct DeviceVkTest: TestSuite::Tester { struct DeviceVkTest: VulkanTester {
explicit DeviceVkTest(); explicit DeviceVkTest();
void createInfoConstruct(); void createInfoConstruct();
@ -67,8 +67,6 @@ struct DeviceVkTest: TestSuite::Tester {
void constructNoQueue(); void constructNoQueue();
void wrap(); void wrap();
void populateGlobalFunctionPointers(); void populateGlobalFunctionPointers();
Instance _instance;
}; };
struct { struct {
@ -122,7 +120,7 @@ struct {
"Device version: Vulkan {}.{}{}\n"}, "Device version: Vulkan {}.{}{}\n"},
}; };
DeviceVkTest::DeviceVkTest(): _instance{InstanceCreateInfo{arguments().first, arguments().second}} { DeviceVkTest::DeviceVkTest(): VulkanTester{NoCreate} {
addTests({&DeviceVkTest::createInfoConstruct, addTests({&DeviceVkTest::createInfoConstruct,
&DeviceVkTest::createInfoConstructImplicitDevice, &DeviceVkTest::createInfoConstructImplicitDevice,
&DeviceVkTest::createInfoConstructNoImplicitExtensions, &DeviceVkTest::createInfoConstructNoImplicitExtensions,
@ -152,21 +150,21 @@ DeviceVkTest::DeviceVkTest(): _instance{InstanceCreateInfo{arguments().first, ar
using namespace Containers::Literals; using namespace Containers::Literals;
void DeviceVkTest::createInfoConstruct() { void DeviceVkTest::createInfoConstruct() {
DeviceCreateInfo info{pickDevice(_instance)}; DeviceCreateInfo info{pickDevice(instance())};
CORRADE_VERIFY(info->sType); CORRADE_VERIFY(info->sType);
CORRADE_VERIFY(!info->pNext); CORRADE_VERIFY(!info->pNext);
/* Extensions might or might not be enabled */ /* Extensions might or might not be enabled */
} }
void DeviceVkTest::createInfoConstructImplicitDevice() { void DeviceVkTest::createInfoConstructImplicitDevice() {
DeviceCreateInfo info{_instance}; DeviceCreateInfo info{instance()};
CORRADE_VERIFY(info->sType); CORRADE_VERIFY(info->sType);
CORRADE_VERIFY(!info->pNext); CORRADE_VERIFY(!info->pNext);
/* Extensions might or might not be enabled */ /* Extensions might or might not be enabled */
} }
void DeviceVkTest::createInfoConstructNoImplicitExtensions() { void DeviceVkTest::createInfoConstructNoImplicitExtensions() {
DeviceCreateInfo info{_instance, DeviceCreateInfo::Flag::NoImplicitExtensions}; DeviceCreateInfo info{instance(), DeviceCreateInfo::Flag::NoImplicitExtensions};
CORRADE_VERIFY(info->sType); CORRADE_VERIFY(info->sType);
CORRADE_VERIFY(!info->pNext); CORRADE_VERIFY(!info->pNext);
/* No extensions enabled as we explicitly disabled that */ /* No extensions enabled as we explicitly disabled that */
@ -178,7 +176,7 @@ void DeviceVkTest::createInfoExtensions() {
if(std::getenv("MAGNUM_DISABLE_EXTENSIONS")) if(std::getenv("MAGNUM_DISABLE_EXTENSIONS"))
CORRADE_SKIP("Can't test with the MAGNUM_DISABLE_EXTENSIONS environment variable set"); CORRADE_SKIP("Can't test with the MAGNUM_DISABLE_EXTENSIONS environment variable set");
DeviceCreateInfo info{_instance, DeviceCreateInfo::Flag::NoImplicitExtensions}; DeviceCreateInfo info{instance(), DeviceCreateInfo::Flag::NoImplicitExtensions};
CORRADE_VERIFY(!info->ppEnabledExtensionNames); CORRADE_VERIFY(!info->ppEnabledExtensionNames);
CORRADE_COMPARE(info->enabledExtensionCount, 0); CORRADE_COMPARE(info->enabledExtensionCount, 0);
@ -207,7 +205,7 @@ void DeviceVkTest::createInfoCopiedStrings() {
Containers::StringView globalButNotNullTerminated = "VK_KHR_maintenance25"_s.except(1); Containers::StringView globalButNotNullTerminated = "VK_KHR_maintenance25"_s.except(1);
Containers::String localButNullTerminated = Extensions::KHR::draw_indirect_count::string(); Containers::String localButNullTerminated = Extensions::KHR::draw_indirect_count::string();
DeviceCreateInfo info{_instance, DeviceCreateInfo::Flag::NoImplicitExtensions}; DeviceCreateInfo info{instance(), DeviceCreateInfo::Flag::NoImplicitExtensions};
info.addEnabledExtensions({ info.addEnabledExtensions({
globalButNotNullTerminated, globalButNotNullTerminated,
localButNullTerminated localButNullTerminated
@ -228,7 +226,7 @@ void DeviceVkTest::createInfoNoQueuePriorities() {
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
DeviceCreateInfo{_instance}.addQueues(0, {}, {}); DeviceCreateInfo{instance()}.addQueues(0, {}, {});
CORRADE_COMPARE(out.str(), "Vk::DeviceCreateInfo::addQueues(): at least one queue priority has to be specified\n"); CORRADE_COMPARE(out.str(), "Vk::DeviceCreateInfo::addQueues(): at least one queue priority has to be specified\n");
} }
@ -240,7 +238,7 @@ void DeviceVkTest::createInfoWrongQueueOutputCount() {
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
Queue a{NoCreate}, b{NoCreate}; Queue a{NoCreate}, b{NoCreate};
DeviceCreateInfo{_instance}.addQueues(0, {0.0f, 1.0f, 0.3f}, {a, b}); DeviceCreateInfo{instance()}.addQueues(0, {0.0f, 1.0f, 0.3f}, {a, b});
CORRADE_COMPARE(out.str(), "Vk::DeviceCreateInfo::addQueues(): expected 3 outuput queue references but got 2\n"); CORRADE_COMPARE(out.str(), "Vk::DeviceCreateInfo::addQueues(): expected 3 outuput queue references but got 2\n");
} }
@ -249,9 +247,9 @@ void DeviceVkTest::construct() {
CORRADE_SKIP("Can't test with the MAGNUM_VULKAN_VERSION environment variable set"); CORRADE_SKIP("Can't test with the MAGNUM_VULKAN_VERSION environment variable set");
{ {
DeviceProperties deviceProperties = pickDevice(_instance); DeviceProperties deviceProperties = pickDevice(instance());
Queue queue{NoCreate}; Queue queue{NoCreate};
Device device{_instance, DeviceCreateInfo{deviceProperties} Device device{instance(), DeviceCreateInfo{deviceProperties}
.addQueues(0, {0.0f}, {queue}) .addQueues(0, {0.0f}, {queue})
}; };
CORRADE_VERIFY(device.handle()); CORRADE_VERIFY(device.handle());
@ -330,13 +328,13 @@ void DeviceVkTest::constructExtensionsCommandLineDisable() {
/* Creating a dedicated instance so we can pass custom args and enable /* Creating a dedicated instance so we can pass custom args and enable
layers independently */ layers independently */
Instance instance{InstanceCreateInfo{Int(data.argsDisable.size()), data.argsDisable} Instance instance2{InstanceCreateInfo{Int(data.argsDisable.size()), data.argsDisable}
.addEnabledLayers({"VK_LAYER_KHRONOS_validation"}) .addEnabledLayers({"VK_LAYER_KHRONOS_validation"})
/* Needed by VK_EXT_debug_marker */ /* Needed by VK_EXT_debug_marker */
.addEnabledExtensions<Extensions::EXT::debug_report>() .addEnabledExtensions<Extensions::EXT::debug_report>()
}; };
DeviceProperties deviceProperties = pickDevice(instance); DeviceProperties deviceProperties = pickDevice(instance2);
ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties({"VK_LAYER_KHRONOS_validation"}); ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties({"VK_LAYER_KHRONOS_validation"});
if(!extensions.isSupported<Extensions::EXT::debug_marker>()) if(!extensions.isSupported<Extensions::EXT::debug_marker>())
CORRADE_SKIP("VK_EXT_debug_marker not supported, can't test"); CORRADE_SKIP("VK_EXT_debug_marker not supported, can't test");
@ -346,7 +344,7 @@ void DeviceVkTest::constructExtensionsCommandLineDisable() {
std::ostringstream out; std::ostringstream out;
Debug redirectOutput{&out}; Debug redirectOutput{&out};
Queue queue{NoCreate}; Queue queue{NoCreate};
Device device{instance, DeviceCreateInfo{deviceProperties, DeviceCreateInfo::Flag::NoImplicitExtensions} Device device{instance2, DeviceCreateInfo{deviceProperties, DeviceCreateInfo::Flag::NoImplicitExtensions}
.addQueues(0, {0.0f}, {queue}) .addQueues(0, {0.0f}, {queue})
.addEnabledExtensions< .addEnabledExtensions<
Extensions::EXT::debug_marker, Extensions::EXT::debug_marker,
@ -386,13 +384,13 @@ void DeviceVkTest::constructExtensionsCommandLineEnable() {
/* Creating a dedicated instance so we can pass custom args and enable /* Creating a dedicated instance so we can pass custom args and enable
layers independently */ layers independently */
Instance instance{InstanceCreateInfo{Int(data.argsEnable.size()), data.argsEnable} Instance instance2{InstanceCreateInfo{Int(data.argsEnable.size()), data.argsEnable}
.addEnabledLayers({"VK_LAYER_KHRONOS_validation"}) .addEnabledLayers({"VK_LAYER_KHRONOS_validation"})
/* Needed by VK_EXT_debug_marker */ /* Needed by VK_EXT_debug_marker */
.addEnabledExtensions<Extensions::EXT::debug_report>() .addEnabledExtensions<Extensions::EXT::debug_report>()
}; };
DeviceProperties deviceProperties = pickDevice(instance); DeviceProperties deviceProperties = pickDevice(instance2);
ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties({"VK_LAYER_KHRONOS_validation"}); ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties({"VK_LAYER_KHRONOS_validation"});
if(!extensions.isSupported<Extensions::EXT::debug_marker>()) if(!extensions.isSupported<Extensions::EXT::debug_marker>())
CORRADE_SKIP("VK_EXT_debug_marker not supported, can't test"); CORRADE_SKIP("VK_EXT_debug_marker not supported, can't test");
@ -402,7 +400,7 @@ void DeviceVkTest::constructExtensionsCommandLineEnable() {
std::ostringstream out; std::ostringstream out;
Debug redirectOutput{&out}; Debug redirectOutput{&out};
Queue queue{NoCreate}; Queue queue{NoCreate};
Device device{instance, DeviceCreateInfo{instance, DeviceCreateInfo::Flag::NoImplicitExtensions} Device device{instance2, DeviceCreateInfo{instance2, DeviceCreateInfo::Flag::NoImplicitExtensions}
.addQueues(0, {0.0f}, {queue}) .addQueues(0, {0.0f}, {queue})
/* Nothing enabled by the application */ /* Nothing enabled by the application */
}; };
@ -427,7 +425,7 @@ void DeviceVkTest::constructExtensionsCommandLineEnable() {
void DeviceVkTest::constructMultipleQueues() { void DeviceVkTest::constructMultipleQueues() {
/* Find a GPU that has at least two queue families and at least four /* Find a GPU that has at least two queue families and at least four
queues in one family */ queues in one family */
Containers::Array<DeviceProperties> deviceProperties = enumerateDevices(_instance); Containers::Array<DeviceProperties> deviceProperties = enumerateDevices(instance());
DeviceProperties* deviceWithMultipleQueues = nullptr; DeviceProperties* deviceWithMultipleQueues = nullptr;
UnsignedInt largeFamily = ~UnsignedInt{}; UnsignedInt largeFamily = ~UnsignedInt{};
@ -456,7 +454,7 @@ void DeviceVkTest::constructMultipleQueues() {
rawQueueInfo.queueCount = 1; rawQueueInfo.queueCount = 1;
Queue a{NoCreate}, b{NoCreate}, c{NoCreate}; Queue a{NoCreate}, b{NoCreate}, c{NoCreate};
Device device{_instance, DeviceCreateInfo{*deviceWithMultipleQueues} Device device{instance(), DeviceCreateInfo{*deviceWithMultipleQueues}
/* Request a raw queue in the middle of it all to test we skip it when /* Request a raw queue in the middle of it all to test we skip it when
populating the outputs, and correctly offset the next IDs. According populating the outputs, and correctly offset the next IDs. According
to the spec we can request each family only once, which makes the to the spec we can request each family only once, which makes the
@ -497,7 +495,7 @@ void DeviceVkTest::constructRawQueue() {
rawQueueInfo.pQueuePriorities = &zero; rawQueueInfo.pQueuePriorities = &zero;
rawQueueInfo.queueFamilyIndex = 0; rawQueueInfo.queueFamilyIndex = 0;
rawQueueInfo.queueCount = 1; rawQueueInfo.queueCount = 1;
Device device{_instance, DeviceCreateInfo{_instance} Device device{instance(), DeviceCreateInfo{instance()}
.addQueues(rawQueueInfo)}; .addQueues(rawQueueInfo)};
/* Fetch the raw queue */ /* Fetch the raw queue */
@ -507,13 +505,13 @@ void DeviceVkTest::constructRawQueue() {
} }
void DeviceVkTest::constructMove() { void DeviceVkTest::constructMove() {
DeviceProperties deviceProperties = pickDevice(_instance); DeviceProperties deviceProperties = pickDevice(instance());
ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties(); ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties();
if(!extensions.isSupported<Extensions::KHR::maintenance1>()) if(!extensions.isSupported<Extensions::KHR::maintenance1>())
CORRADE_SKIP("VK_KHR_maintenance1 not supported, can't test"); CORRADE_SKIP("VK_KHR_maintenance1 not supported, can't test");
Queue queue{NoCreate}; Queue queue{NoCreate};
Device a{_instance, DeviceCreateInfo{deviceProperties} Device a{instance(), DeviceCreateInfo{deviceProperties}
.addQueues(0, {0.0f}, {queue}) .addQueues(0, {0.0f}, {queue})
.addEnabledExtensions<Extensions::KHR::maintenance1>() .addEnabledExtensions<Extensions::KHR::maintenance1>()
}; };
@ -555,7 +553,7 @@ void DeviceVkTest::constructUnknownExtension() {
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
Queue queue{NoCreate}; Queue queue{NoCreate};
Device device{_instance, DeviceCreateInfo{_instance} Device device{instance(), DeviceCreateInfo{instance()}
.addQueues(0, {0.0f}, {queue}) .addQueues(0, {0.0f}, {queue})
.addEnabledExtensions({"VK_this_doesnt_exist"_s})}; .addEnabledExtensions({"VK_this_doesnt_exist"_s})};
CORRADE_COMPARE(out.str(), "TODO"); CORRADE_COMPARE(out.str(), "TODO");
@ -568,7 +566,7 @@ void DeviceVkTest::constructNoQueue() {
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
Device device{_instance, DeviceCreateInfo{_instance}}; Device device{instance(), DeviceCreateInfo{instance()}};
CORRADE_COMPARE(out.str(), "Vk::Device: needs to be created with at least one queue\n"); CORRADE_COMPARE(out.str(), "Vk::Device: needs to be created with at least one queue\n");
} }
@ -584,13 +582,13 @@ void DeviceVkTest::wrap() {
CORRADE_SKIP("VK_LAYER_KHRONOS_validation not supported, can't test"); CORRADE_SKIP("VK_LAYER_KHRONOS_validation not supported, can't test");
/* Creating a dedicated instance so we can enable layers independently */ /* Creating a dedicated instance so we can enable layers independently */
Instance instance{InstanceCreateInfo{} Instance instance2{InstanceCreateInfo{}
.addEnabledLayers({"VK_LAYER_KHRONOS_validation"}) .addEnabledLayers({"VK_LAYER_KHRONOS_validation"})
/* Needed by VK_EXT_debug_marker */ /* Needed by VK_EXT_debug_marker */
.addEnabledExtensions<Extensions::EXT::debug_report>() .addEnabledExtensions<Extensions::EXT::debug_report>()
}; };
DeviceProperties deviceProperties = pickDevice(instance); DeviceProperties deviceProperties = pickDevice(instance2);
ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties({"VK_LAYER_KHRONOS_validation"}); ExtensionProperties extensions = deviceProperties.enumerateExtensionProperties({"VK_LAYER_KHRONOS_validation"});
if(!extensions.isSupported<Extensions::EXT::debug_marker>()) if(!extensions.isSupported<Extensions::EXT::debug_marker>())
CORRADE_SKIP("VK_EXT_debug_marker not supported, can't test"); CORRADE_SKIP("VK_EXT_debug_marker not supported, can't test");
@ -599,8 +597,8 @@ void DeviceVkTest::wrap() {
VkDevice device; VkDevice device;
Queue queue{NoCreate}; Queue queue{NoCreate};
CORRADE_COMPARE(Result(instance->CreateDevice(deviceProperties, CORRADE_COMPARE(Result(instance2->CreateDevice(deviceProperties,
DeviceCreateInfo{instance} DeviceCreateInfo{instance2}
.addQueues(0, {0.0f}, {queue}) .addQueues(0, {0.0f}, {queue})
.addEnabledExtensions< .addEnabledExtensions<
Extensions::EXT::debug_marker, Extensions::EXT::debug_marker,
@ -614,7 +612,7 @@ void DeviceVkTest::wrap() {
{ {
/* Wrapping should load the basic function pointers */ /* Wrapping should load the basic function pointers */
auto wrapped = Device::wrap(instance, device, Version::Vk11, { auto wrapped = Device::wrap(instance2, device, Version::Vk11, {
Extensions::EXT::debug_marker::string() Extensions::EXT::debug_marker::string()
}, HandleFlag::DestroyOnDestruction); }, HandleFlag::DestroyOnDestruction);
CORRADE_VERIFY(wrapped->DestroyDevice); CORRADE_VERIFY(wrapped->DestroyDevice);
@ -639,7 +637,7 @@ void DeviceVkTest::wrap() {
} }
/* ...so we can wrap it again, non-owned, and then destroy it manually */ /* ...so we can wrap it again, non-owned, and then destroy it manually */
auto wrapped = Device::wrap(instance, device, Version::Vk10, {}); auto wrapped = Device::wrap(instance2, device, Version::Vk10, {});
CORRADE_VERIFY(wrapped->DestroyDevice); CORRADE_VERIFY(wrapped->DestroyDevice);
wrapped->DestroyDevice(device, nullptr); wrapped->DestroyDevice(device, nullptr);
} }
@ -648,7 +646,7 @@ void DeviceVkTest::populateGlobalFunctionPointers() {
vkDestroyDevice = nullptr; vkDestroyDevice = nullptr;
Queue queue{NoCreate}; Queue queue{NoCreate};
Device device{_instance, DeviceCreateInfo{_instance} Device device{instance(), DeviceCreateInfo{instance()}
.addQueues(0, {0.0f}, {queue}) .addQueues(0, {0.0f}, {queue})
}; };
CORRADE_VERIFY(!vkDestroyDevice); CORRADE_VERIFY(!vkDestroyDevice);

Loading…
Cancel
Save