refactor(renderer/vk/gpu): quality of life modifications
This commit is contained in:
parent
f50208653e
commit
8730d31e2f
2 changed files with 47 additions and 22 deletions
|
|
@ -5,35 +5,38 @@
|
|||
namespace lt::renderer::vk {
|
||||
|
||||
Gpu::Gpu(IInstance *instance)
|
||||
: m_descriptor_indexing_features(
|
||||
{ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES }
|
||||
)
|
||||
{
|
||||
auto gpus = static_cast<Instance *>(instance)->enumerate_gpus();
|
||||
|
||||
for (auto &gpu : gpus)
|
||||
{
|
||||
auto properties = VkPhysicalDeviceProperties {};
|
||||
auto features = VkPhysicalDeviceFeatures {};
|
||||
auto features = VkPhysicalDeviceFeatures2 {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
|
||||
.pNext = &m_descriptor_indexing_features
|
||||
};
|
||||
|
||||
vk_get_physical_device_properties(gpu, &properties);
|
||||
vk_get_physical_device_features(gpu, &features);
|
||||
|
||||
if (properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
|
||||
&& features.geometryShader)
|
||||
&& features.features.geometryShader)
|
||||
{
|
||||
m_gpu = gpu;
|
||||
}
|
||||
}
|
||||
ensure(m_gpu, "Failed to find any suitable Vulkan physical device");
|
||||
}
|
||||
|
||||
[[nodiscard]] auto Gpu::get_queue_family_properties() const -> std::vector<VkQueueFamilyProperties>
|
||||
{
|
||||
|
||||
vk_get_physical_device_memory_properties(m_gpu, &m_memory_properties);
|
||||
|
||||
auto count = uint32_t { 0u };
|
||||
vk_get_physical_device_queue_family_properties(m_gpu, &count, nullptr);
|
||||
|
||||
auto properties = std::vector<VkQueueFamilyProperties>(count);
|
||||
vk_get_physical_device_queue_family_properties(m_gpu, &count, properties.data());
|
||||
|
||||
return properties;
|
||||
m_queue_family_properties.resize(count);
|
||||
vk_get_physical_device_queue_family_properties(m_gpu, &count, m_queue_family_properties.data());
|
||||
}
|
||||
|
||||
[[nodiscard]] auto Gpu::queue_family_supports_presentation(
|
||||
|
|
@ -67,11 +70,11 @@ Gpu::Gpu(IInstance *instance)
|
|||
return formats;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto Gpu::get_memory_properties() const -> VkPhysicalDeviceMemoryProperties
|
||||
[[nodiscard]] auto Gpu::create_device(VkDeviceCreateInfo info) const -> VkDevice
|
||||
{
|
||||
auto memory_properties = VkPhysicalDeviceMemoryProperties {};
|
||||
vk_get_physical_device_memory_properties(m_gpu, &memory_properties);
|
||||
return memory_properties;
|
||||
auto *device = VkDevice {};
|
||||
vkc(vk_create_device(m_gpu, &info, nullptr, &device));
|
||||
return device;
|
||||
}
|
||||
|
||||
} // namespace lt::renderer::vk
|
||||
|
|
|
|||
|
|
@ -12,13 +12,6 @@ class Gpu: public IGpu
|
|||
public:
|
||||
Gpu(IInstance *instance);
|
||||
|
||||
[[nodiscard]] auto vk() const -> VkPhysicalDevice
|
||||
{
|
||||
return m_gpu;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_queue_family_properties() const -> std::vector<VkQueueFamilyProperties>;
|
||||
|
||||
[[nodiscard]] auto queue_family_supports_presentation(
|
||||
VkSurfaceKHR surface,
|
||||
uint32_t queue_family_idx
|
||||
|
|
@ -30,10 +23,39 @@ public:
|
|||
[[nodiscard]] auto get_surface_formats(VkSurfaceKHR surface) const
|
||||
-> std::vector<VkSurfaceFormatKHR>;
|
||||
|
||||
[[nodiscard]] auto get_memory_properties() const -> VkPhysicalDeviceMemoryProperties;
|
||||
[[nodiscard]] auto create_device(VkDeviceCreateInfo info) const -> VkDevice;
|
||||
|
||||
[[nodiscard]] auto get_properties() const -> VkPhysicalDeviceProperties
|
||||
{
|
||||
return m_properties;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_descriptor_indexing_features() const
|
||||
-> VkPhysicalDeviceDescriptorIndexingFeatures
|
||||
{
|
||||
return m_descriptor_indexing_features;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_memory_properties() const -> VkPhysicalDeviceMemoryProperties
|
||||
{
|
||||
return m_memory_properties;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_queue_family_properties() const -> std::vector<VkQueueFamilyProperties>
|
||||
{
|
||||
return m_queue_family_properties;
|
||||
}
|
||||
|
||||
private:
|
||||
memory::NullOnMove<VkPhysicalDevice> m_gpu = VK_NULL_HANDLE;
|
||||
|
||||
VkPhysicalDeviceProperties m_properties {};
|
||||
|
||||
VkPhysicalDeviceDescriptorIndexingFeatures m_descriptor_indexing_features;
|
||||
|
||||
VkPhysicalDeviceMemoryProperties m_memory_properties {};
|
||||
|
||||
std::vector<VkQueueFamilyProperties> m_queue_family_properties;
|
||||
};
|
||||
|
||||
} // namespace lt::renderer::vk
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue