project-aster/aster_core/physical_device.h

52 lines
1.3 KiB
C++

// =============================================
// Aster: physical_device.h
// Copyright (c) 2020-2024 Anish Bhobe
// =============================================
#pragma once
#include "global.h"
#include "window.h"
struct QueueFamilyIndices {
static constexpr u32 invalid_value = 0xFFFFFFFFu;
u32 graphics_idx{ invalid_value };
u32 present_idx{ invalid_value };
u32 compute_idx{ invalid_value };
u32 transfer_idx{ invalid_value };
[[nodiscard]] b8 has_graphics() const {
return graphics_idx != invalid_value;
}
[[nodiscard]] b8 has_present() const {
return present_idx != invalid_value;
}
[[nodiscard]] b8 has_compute() const {
return compute_idx != invalid_value;
}
[[nodiscard]] b8 has_transfer() const {
return transfer_idx != invalid_value;
}
};
struct PhysicalDevice {
vk::raii::PhysicalDevice device;
vk::PhysicalDeviceProperties properties;
vk::PhysicalDeviceFeatures features;
QueueFamilyIndices queue_families;
PhysicalDevice(const Window *const _window, vk::raii::PhysicalDevice _device) :
device{ std::move(_device) } {
properties = device.getProperties();
features = device.getFeatures();
queue_families = get_queue_families(_window, &device);
}
private:
[[nodiscard]] static QueueFamilyIndices get_queue_families(const Window * _window, const vk::raii::PhysicalDevice* _device) ;
};