Browse Source

Vk: Create device in AbstractVulkanTester

Signed-off-by: Squareys <squareys@googlemail.com>
pull/202/head
Squareys 10 years ago committed by Squareys
parent
commit
91f64d4732
  1. 53
      src/Magnum/Vk/Test/AbstractVulkanTester.h
  2. 13
      src/Magnum/Vk/Test/BufferTest.cpp
  3. 13
      src/Magnum/Vk/Test/CMakeLists.txt
  4. 2
      src/Magnum/Vk/Test/CommandTest.cpp

53
src/Magnum/Vk/Test/AbstractVulkanTester.h

@ -27,30 +27,75 @@
*/ */
#include <Corrade/TestSuite/Tester.h> #include <Corrade/TestSuite/Tester.h>
#include <Magnum/Vk/Instance.h>
#include "Magnum/Vk/Instance.h"
#include "Magnum/Vk/Device.h"
using namespace Corrade; using namespace Corrade;
namespace Magnum { namespace Vk { namespace Test { namespace Magnum { namespace Vk { namespace Test {
struct QueueRequest {
QueueRequest(QueueFamily family, const std::initializer_list<Float>& priorities):
_family{family}, _priorities{priorities}
{}
QueueFamily family() const {
return _family;
}
const std::vector<Float>& priorities() const {
return _priorities;
}
private:
QueueFamily _family;
const std::vector<Float> _priorities;
};
class AbstractVulkanTester: public TestSuite::Tester { class AbstractVulkanTester: public TestSuite::Tester {
public: public:
explicit AbstractVulkanTester(); explicit AbstractVulkanTester(
const std::vector<QueueRequest>& requestedQueues,
const DeviceFeatures& features,
const std::vector<const char*>& extensionNames,
const std::vector<const char*>& validationLayerNames);
Vk::Instance& instance() { Vk::Instance& instance() {
return _instance; return _instance;
} }
Vk::Device& device() {
return _device;
}
private: private:
static std::vector<DeviceQueueCreateInfo> createQueueInfos(const std::vector<QueueRequest>& requests, PhysicalDevice& device);
Vk::Instance _instance; Vk::Instance _instance;
Vk::Device _device;
}; };
AbstractVulkanTester::AbstractVulkanTester(): TestSuite::Tester{TestSuite::Tester::TesterConfiguration{}.setSkippedArgumentPrefixes({"magnum"})} { AbstractVulkanTester::AbstractVulkanTester(
const std::vector<QueueRequest>& requestedQueues,
const DeviceFeatures& features,
const std::vector<const char*>& extensions,
const std::vector<const char*>& 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<DeviceQueueCreateInfo> AbstractVulkanTester::createQueueInfos(const std::vector<QueueRequest>& requests, PhysicalDevice& device) {
std::vector<DeviceQueueCreateInfo> result;
for(auto& request : requests) {
result.push_back(DeviceQueueCreateInfo(device.getQueueFamilyIndex(request.family()), request.priorities()));
}
return result;
}
#if defined(CORRADE_TESTSUITE_TARGET_XCTEST) #if defined(CORRADE_TESTSUITE_TARGET_XCTEST)
#define MAGNUM_VK_TEST_MAIN(Class) \ #define MAGNUM_VK_TEST_MAIN(Class) \

13
src/Magnum/Vk/Test/BufferTest.cpp

@ -30,6 +30,7 @@
#include "Magnum/Vk/Instance.h" #include "Magnum/Vk/Instance.h"
#include "Magnum/Vk/Test/AbstractVulkanTester.h" #include "Magnum/Vk/Test/AbstractVulkanTester.h"
#include "Magnum/Vk/Buffer.h"
using namespace Corrade; using namespace Corrade;
@ -40,12 +41,12 @@ struct BufferTest: AbstractVulkanTester {
explicit BufferTest(); explicit BufferTest();
void constructCopyMove(); 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, addTests({&BufferTest::constructCopyMove,
&BufferTest::staging}); &BufferTest::allocate });
} }
void BufferTest::constructCopyMove() { void BufferTest::constructCopyMove() {
@ -56,8 +57,10 @@ void BufferTest::constructCopyMove() {
CORRADE_VERIFY(!(std::is_assignable<Buffer, Buffer&&>{})); CORRADE_VERIFY(!(std::is_assignable<Buffer, Buffer&&>{}));
} }
void BufferTest::staging() { void BufferTest::allocate() {
MAGNUM_VK_VERIFY_NO_ERROR(); Buffer buffer{device(), 1, BufferUsage::IndexBuffer};
std::unique_ptr<DeviceMemory> mem = buffer.allocateDeviceMemory(MemoryProperty::DeviceLocal);
} }
}}} }}}

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

@ -26,12 +26,9 @@
corrade_add_test(VkInstanceTest InstanceTest.cpp LIBRARIES MagnumVk) 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(VkInstanceVkTest InstanceVkTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) corrade_add_test(VkCommandTest CommandTest.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(VkBufferTest BufferTest.cpp LIBRARIES ${VK_TEST_LIBRARIES})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/configure.h) ${CMAKE_CURRENT_BINARY_DIR}/configure.h)
endif()

2
src/Magnum/Vk/Test/CommandTest.cpp

@ -43,7 +43,7 @@ struct CommandVkTest: AbstractVulkanTester {
void doTheLambdasWork(); void doTheLambdasWork();
}; };
CommandVkTest::CommandVkTest() { CommandVkTest::CommandVkTest(): AbstractVulkanTester({{QueueFamily::Graphics, {0.0f}}}, {}, {}, {}) {
addTests({&CommandVkTest::doTheLambdasWork}); addTests({&CommandVkTest::doTheLambdasWork});
} }

Loading…
Cancel
Save