diff options
author | dan sinclair <dsinclair@google.com> | 2019-12-11 20:27:52 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-11 20:27:52 -0500 |
commit | db781e54c27711e11166733ba3027b750d886005 (patch) | |
tree | 4dcbf4810d50ba21062d1bd753b28c90efc775ed /samples | |
parent | 52444a47eee93d229f527d7283422fb85845610c (diff) | |
download | amber-db781e54c27711e11166733ba3027b750d886005.tar.gz |
Add Float 16 Support (#751)
This CL adds the float16 data type into amber_script and the required plumbing to enable the feature.
Fixes #485
Diffstat (limited to 'samples')
-rw-r--r-- | samples/config_helper_vulkan.cc | 22 | ||||
-rw-r--r-- | samples/config_helper_vulkan.h | 2 |
2 files changed, 19 insertions, 5 deletions
diff --git a/samples/config_helper_vulkan.cc b/samples/config_helper_vulkan.cc index 606c093..fff21a6 100644 --- a/samples/config_helper_vulkan.cc +++ b/samples/config_helper_vulkan.cc @@ -46,6 +46,7 @@ const size_t kNumberOfRequiredValidationLayers = const char kVariablePointers[] = "VariablePointerFeatures.variablePointers"; const char kVariablePointersStorageBuffer[] = "VariablePointerFeatures.variablePointersStorageBuffer"; +const char kFloat16Int8_Float16[] = "Float16Int8Features.shaderFloat16"; const char kExtensionForValidationLayer[] = "VK_EXT_debug_report"; @@ -598,8 +599,8 @@ std::string deviceTypeToName(VkPhysicalDeviceType type) { ConfigHelperVulkan::ConfigHelperVulkan() : available_features_(VkPhysicalDeviceFeatures()), available_features2_(VkPhysicalDeviceFeatures2KHR()), - variable_pointers_feature_(VkPhysicalDeviceVariablePointerFeaturesKHR()) { -} + variable_pointers_feature_(VkPhysicalDeviceVariablePointerFeaturesKHR()), + float16_int8_feature_(VkPhysicalDeviceFloat16Int8FeaturesKHR()) {} ConfigHelperVulkan::~ConfigHelperVulkan() { if (vulkan_device_) @@ -666,9 +667,10 @@ amber::Result ConfigHelperVulkan::CreateVulkanInstance( // Determine if VkPhysicalDeviceProperties2KHR should be used for (auto& ext : required_extensions) { - if (ext == "VK_KHR_get_physical_device_properties2") { + if (ext == "VK_KHR_get_physical_device_properties2") supports_get_physical_device_properties2_ = true; - } + if (ext == "VK_KHR_shader_float16_int8") + supports_shader_float16_int8_ = true; } std::vector<const char*> required_extensions_in_char; @@ -882,9 +884,17 @@ amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures1( amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures2( const std::vector<std::string>& required_features, VkDeviceCreateInfo* info) { + float16_int8_feature_.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR; + float16_int8_feature_.pNext = nullptr; + variable_pointers_feature_.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR; - variable_pointers_feature_.pNext = nullptr; + + if (supports_shader_float16_int8_) + variable_pointers_feature_.pNext = &float16_int8_feature_; + else + variable_pointers_feature_.pNext = nullptr; available_features2_.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR; available_features2_.pNext = &variable_pointers_feature_; @@ -901,6 +911,8 @@ amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures2( variable_pointers_feature_.variablePointers = VK_TRUE; else if (feature == kVariablePointersStorageBuffer) variable_pointers_feature_.variablePointersStorageBuffer = VK_TRUE; + else if (feature == kFloat16Int8_Float16) + float16_int8_feature_.shaderFloat16 = VK_TRUE; } VkPhysicalDeviceFeatures required_vulkan_features = diff --git a/samples/config_helper_vulkan.h b/samples/config_helper_vulkan.h index 8b830aa..b5d0b09 100644 --- a/samples/config_helper_vulkan.h +++ b/samples/config_helper_vulkan.h @@ -110,9 +110,11 @@ class ConfigHelperVulkan : public ConfigHelperImpl { VkDevice vulkan_device_ = VK_NULL_HANDLE; bool supports_get_physical_device_properties2_ = false; + bool supports_shader_float16_int8_ = false; VkPhysicalDeviceFeatures available_features_; VkPhysicalDeviceFeatures2KHR available_features2_; VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointers_feature_; + VkPhysicalDeviceFloat16Int8FeaturesKHR float16_int8_feature_; }; } // namespace sample |