aboutsummaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authordan sinclair <dsinclair@google.com>2019-12-11 20:27:52 -0500
committerGitHub <noreply@github.com>2019-12-11 20:27:52 -0500
commitdb781e54c27711e11166733ba3027b750d886005 (patch)
tree4dcbf4810d50ba21062d1bd753b28c90efc775ed /samples
parent52444a47eee93d229f527d7283422fb85845610c (diff)
downloadamber-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.cc22
-rw-r--r--samples/config_helper_vulkan.h2
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