diff --git a/oatmeal/src/ctx.h b/oatmeal/src/ctx.h index d1ac7fd..73461ce 100644 --- a/oatmeal/src/ctx.h +++ b/oatmeal/src/ctx.h @@ -87,5 +87,7 @@ namespace Oatmeal { void pickPhysicalDevice(); bool isPhysicalDeviceSupported(vk::raii::PhysicalDevice device); uint32_t scorePhysicalDevice(vk::raii::PhysicalDevice device); + vk::SampleCountFlagBits getMaxUsableSampleCount(); + void createLogicalDevice(); }; } // namespace Oatmeal diff --git a/oatmeal/src/ctx_attachments.cpp b/oatmeal/src/ctx_attachments.cpp new file mode 100644 index 0000000..22b723d --- /dev/null +++ b/oatmeal/src/ctx_attachments.cpp @@ -0,0 +1,27 @@ +#include "ctx.h" +#include "vulkan/vulkan.hpp" + +namespace Oatmeal { + + vk::SampleCountFlagBits ctx::getMaxUsableSampleCount() { + vk::PhysicalDeviceProperties physicalDeviceProperties = m_physicalDevice.getProperties(); + + vk::SampleCountFlags count = physicalDeviceProperties.limits.framebufferColorSampleCounts & + physicalDeviceProperties.limits.framebufferDepthSampleCounts; + + if (count & vk::SampleCountFlagBits::e16) { + return vk::SampleCountFlagBits::e16; + } + if (count & vk::SampleCountFlagBits::e8) { + return vk::SampleCountFlagBits::e8; + } + if (count & vk::SampleCountFlagBits::e4) { + return vk::SampleCountFlagBits::e4; + } + if (count & vk::SampleCountFlagBits::e2) { + return vk::SampleCountFlagBits::e2; + } + + return vk::SampleCountFlagBits::e1; + } +} // namespace Oatmeal