diff --git a/src/Magnum/Vk/Test/AbstractVulkanTester.h b/src/Magnum/Vk/Test/AbstractVulkanTester.h index a5cfd8f70..b6d66c203 100644 --- a/src/Magnum/Vk/Test/AbstractVulkanTester.h +++ b/src/Magnum/Vk/Test/AbstractVulkanTester.h @@ -27,30 +27,75 @@ */ #include -#include + +#include "Magnum/Vk/Instance.h" +#include "Magnum/Vk/Device.h" using namespace Corrade; namespace Magnum { namespace Vk { namespace Test { +struct QueueRequest { + + QueueRequest(QueueFamily family, const std::initializer_list& priorities): + _family{family}, _priorities{priorities} + {} + + QueueFamily family() const { + return _family; + } + + const std::vector& priorities() const { + return _priorities; + } + +private: + QueueFamily _family; + const std::vector _priorities; +}; + class AbstractVulkanTester: public TestSuite::Tester { public: - explicit AbstractVulkanTester(); + explicit AbstractVulkanTester( + const std::vector& requestedQueues, + const DeviceFeatures& features, + const std::vector& extensionNames, + const std::vector& validationLayerNames); Vk::Instance& instance() { return _instance; } + Vk::Device& device() { + return _device; + } + private: + static std::vector createQueueInfos(const std::vector& requests, PhysicalDevice& device); + Vk::Instance _instance; + Vk::Device _device; }; -AbstractVulkanTester::AbstractVulkanTester(): TestSuite::Tester{TestSuite::Tester::TesterConfiguration{}.setSkippedArgumentPrefixes({"magnum"})} { - +AbstractVulkanTester::AbstractVulkanTester( + const std::vector& requestedQueues, + const DeviceFeatures& features, + const std::vector& extensions, + const std::vector& validationLayers): TestSuite::Tester{TestSuite::Tester::TesterConfiguration{}.setSkippedArgumentPrefixes({"magnum"})}, + _device{_instance.enumeratePhysicalDevices().data()[0], createQueueInfos(requestedQueues, _instance.enumeratePhysicalDevices().data()[0]), extensions, validationLayers, features} { // TODO: Choose appropriate device, not first + } -#define MAGNUM_VK_VERIFY_NO_ERROR() CORRADE_COMPARE(Magnum::Vk::Instance::current().error(), Magnum::Vk::Result::Success) +std::vector AbstractVulkanTester::createQueueInfos(const std::vector& requests, PhysicalDevice& device) { + std::vector result; + + for(auto& request : requests) { + result.push_back(DeviceQueueCreateInfo(device.getQueueFamilyIndex(request.family()), request.priorities())); + } + + return result; +} #if defined(CORRADE_TESTSUITE_TARGET_XCTEST) #define MAGNUM_VK_TEST_MAIN(Class) \ diff --git a/src/Magnum/Vk/Test/BufferTest.cpp b/src/Magnum/Vk/Test/BufferTest.cpp index 4da3a8adb..c3a1c377c 100644 --- a/src/Magnum/Vk/Test/BufferTest.cpp +++ b/src/Magnum/Vk/Test/BufferTest.cpp @@ -30,6 +30,7 @@ #include "Magnum/Vk/Instance.h" #include "Magnum/Vk/Test/AbstractVulkanTester.h" +#include "Magnum/Vk/Buffer.h" using namespace Corrade; @@ -40,12 +41,12 @@ struct BufferTest: AbstractVulkanTester { explicit BufferTest(); void constructCopyMove(); - void staging(); + void allocate(); }; -BufferTest::BufferTest() { +BufferTest::BufferTest(): AbstractVulkanTester({{QueueFamily::Graphics, {0.0f}}}, {DeviceFeature::RobustBufferAccess}, {}, {}) { // TODO(squareys): Just an example addTests({&BufferTest::constructCopyMove, - &BufferTest::staging}); + &BufferTest::allocate }); } void BufferTest::constructCopyMove() { @@ -56,8 +57,10 @@ void BufferTest::constructCopyMove() { CORRADE_VERIFY(!(std::is_assignable{})); } -void BufferTest::staging() { - MAGNUM_VK_VERIFY_NO_ERROR(); +void BufferTest::allocate() { + Buffer buffer{device(), 1, BufferUsage::IndexBuffer}; + std::unique_ptr mem = buffer.allocateDeviceMemory(MemoryProperty::DeviceLocal); + } }}} diff --git a/src/Magnum/Vk/Test/CMakeLists.txt b/src/Magnum/Vk/Test/CMakeLists.txt index bc47f4e8d..0aca5bf6f 100644 --- a/src/Magnum/Vk/Test/CMakeLists.txt +++ b/src/Magnum/Vk/Test/CMakeLists.txt @@ -26,12 +26,9 @@ corrade_add_test(VkInstanceTest InstanceTest.cpp LIBRARIES MagnumVk) -if(BUILD_VK_TESTS) - corrade_add_test(VkInstanceVkTest InstanceVkTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) - corrade_add_test(VkCommandTest CommandTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) - corrade_add_test(VkBufferTest BufferTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) +corrade_add_test(VkInstanceVkTest InstanceVkTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) +corrade_add_test(VkCommandTest CommandTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) +corrade_add_test(VkBufferTest BufferTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake - ${CMAKE_CURRENT_BINARY_DIR}/configure.h) - -endif() +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/configure.h) diff --git a/src/Magnum/Vk/Test/CommandTest.cpp b/src/Magnum/Vk/Test/CommandTest.cpp index dd236f16e..8736aad58 100644 --- a/src/Magnum/Vk/Test/CommandTest.cpp +++ b/src/Magnum/Vk/Test/CommandTest.cpp @@ -43,7 +43,7 @@ struct CommandVkTest: AbstractVulkanTester { void doTheLambdasWork(); }; -CommandVkTest::CommandVkTest() { +CommandVkTest::CommandVkTest(): AbstractVulkanTester({{QueueFamily::Graphics, {0.0f}}}, {}, {}, {}) { addTests({&CommandVkTest::doTheLambdasWork}); }