52 lines
1.3 KiB
C++
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) ;
|
|
};
|