Select Git revision
device.cpp 9.81 KiB
// file : liblava/base/device.cpp
// copyright : Copyright (c) 2018-present, Lava Block OÜ and contributors
// license : MIT; see accompanying LICENSE file
#include <liblava/base/device.hpp>
#include <liblava/base/instance.hpp>
#include <liblava/base/physical_device.hpp>
namespace lava {
void device::create_param::set_all_queues() {
lava::set_all_queues(queue_family_infos, physical_device->get_queue_family_properties());
}
bool device::create_param::add_queues(VkQueueFlags flags, ui32 count, r32 priority) {
return lava::add_queues(queue_family_infos, physical_device->get_queue_family_properties(), flags, count, priority);
}
bool device::create_param::add_dedicated_queues(r32 priority) {
return lava::add_dedicated_queues(queue_family_infos, physical_device->get_queue_family_properties(), priority);
}
verify_queues_result device::create_param::verify_queues() const {
return lava::verify_queues(queue_family_infos, physical_device->get_queue_family_properties());
}
void log_verify_queues_failed(verify_queues_result result) {
switch (result) {
case verify_queues_result::empty_list: {
log()->error("create device - verify queues - param with empty list");
break;
}
case verify_queues_result::no_properties: {
log()->error("create device - verify queues - no device family properties");
break;
}
case verify_queues_result::duplicate_family_index: {
log()->error("create device - verify queues - duplicate family index");
break;
}
case verify_queues_result::no_family_index: {
log()->error("create device - verify queues - family index is not available");
break;
}
case verify_queues_result::no_queues: {
log()->error("create device - verify queues - undefined queues in family");
break;
}
case verify_queues_result::too_many_queues: {
log()->error("create device - verify queues - number of queues is incorrect");
break;
}
case verify_queues_result::no_compatible_flags: {
log()->error("create device - verify queues - no compatible flags in queue");
break;
}
default:
log()->error("create device - verify queues");
}
}
bool device::create(create_param::ref param) {
physical_device = param.physical_device;
if (!physical_device)
return false;
auto verify_result = param.verify_queues();
if (verify_result != verify_queues_result::ok) {
log_verify_queues_failed(verify_result);
return false;