From 6b8869e05d9245ce18f769df95bc3e4f81d01976 Mon Sep 17 00:00:00 2001 From: Romaric Jodin Date: Wed, 28 Jun 2023 10:31:21 +0200 Subject: [PATCH] add support for roundingmoderte capability --- src/device.cpp | 10 ++++++++++ src/device.hpp | 1 + 2 files changed, 11 insertions(+) diff --git a/src/device.cpp b/src/device.cpp index 7c5121ae..15afe958 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -47,6 +47,8 @@ void cvk_device::init_vulkan_properties(VkInstance instance) { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT; m_subgroup_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + m_float_controls_properties.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES; //--- Get maxMemoryAllocationSize for figuring out the max single buffer // allocation size and default init when the extension is not supported @@ -71,6 +73,8 @@ void cvk_device::init_vulkan_properties(VkInstance instance) { m_subgroup_properties), VER_EXT_PROP(VK_MAKE_VERSION(1, 1, 0), nullptr, m_maintenance3_properties), + VER_EXT_PROP(VK_MAKE_VERSION(1, 2, 0), nullptr, + m_float_controls_properties), }; #undef VER_EXT_PROP @@ -1038,6 +1042,12 @@ bool cvk_device::supports_capability(spv::Capability capability) const { return supports_non_uniform_decoration(); case spv::CapabilityPhysicalStorageBufferAddresses: return m_features_buffer_device_address.bufferDeviceAddress; + case spv::CapabilityRoundingModeRTE: + return m_float_controls_properties.shaderRoundingModeRTEFloat32 && + (m_float_controls_properties.shaderRoundingModeRTEFloat16 || + !m_features_float16_int8.shaderFloat16) && + (m_float_controls_properties.shaderRoundingModeRTEFloat64 || + !m_features.features.shaderFloat64); // Capabilities that have not yet been mapped to Vulkan features: default: cvk_warn_fn("Capability %d not yet mapped to a feature.", capability); diff --git a/src/device.hpp b/src/device.hpp index cb3c1971..2ef07b16 100644 --- a/src/device.hpp +++ b/src/device.hpp @@ -585,6 +585,7 @@ struct cvk_device : public _cl_device_id, m_features_vulkan_memory_model{}; VkPhysicalDeviceBufferDeviceAddressFeaturesKHR m_features_buffer_device_address{}; + VkPhysicalDeviceFloatControlsProperties m_float_controls_properties{}; VkDevice m_dev; std::vector m_vulkan_device_extensions;