diff options
author | 2020-02-27 19:31:51 -0800 | |
---|---|---|
committer | 2020-02-27 19:33:24 -0800 | |
commit | c1b5ffb1bfa2e7ac9d8febd25aed38da5b1ea645 (patch) | |
tree | 15608b02661f191fce33acb1b7e8f6436fd69c90 | |
parent | 57cabaca38fd527acdec5fb92c7c5189214ba2b1 (diff) |
[vkjson] Add support of VK_KHR_shader_float16_int8.
Bug: b/150335028
Test: adb shell cmd gpu vkjson
Change-Id: Ie9808e0f8d79d6992e5cb480a24c0f98e5437df1
-rw-r--r-- | vulkan/vkjson/vkjson.cc | 18 | ||||
-rw-r--r-- | vulkan/vkjson/vkjson.h | 11 | ||||
-rw-r--r-- | vulkan/vkjson/vkjson_instance.cc | 10 |
3 files changed, 39 insertions, 0 deletions
diff --git a/vulkan/vkjson/vkjson.cc b/vulkan/vkjson/vkjson.cc index 8f714d89d8..b0b466c0a1 100644 --- a/vulkan/vkjson/vkjson.cc +++ b/vulkan/vkjson/vkjson.cc @@ -591,6 +591,13 @@ inline bool Iterate(Visitor* visitor, } template <typename Visitor> +inline bool Iterate(Visitor* visitor, + VkJsonExtShaderFloat16Int8Features* features) { + return visitor->Visit("shaderFloat16Int8FeaturesKHR", + &features->shader_float16_int8_features_khr); +} + +template <typename Visitor> inline bool Iterate(Visitor* visitor, VkMemoryType* type) { return visitor->Visit("propertyFlags", &type->propertyFlags) && @@ -692,6 +699,13 @@ inline bool Iterate(Visitor* visitor, template <typename Visitor> inline bool Iterate(Visitor* visitor, + VkPhysicalDeviceShaderFloat16Int8FeaturesKHR* features) { + return visitor->Visit("shaderFloat16", &features->shaderFloat16) && + visitor->Visit("shaderInt8", &features->shaderInt8); +} + +template <typename Visitor> +inline bool Iterate(Visitor* visitor, VkPhysicalDeviceProtectedMemoryFeatures* features) { return visitor->Visit("protectedMemory", &features->protectedMemory); } @@ -824,6 +838,10 @@ inline bool Iterate(Visitor* visitor, VkJsonDevice* device) { ret &= visitor->Visit("VK_KHR_variable_pointers", &device->ext_variable_pointer_features); } + if (device->ext_shader_float16_int8_features.reported) { + ret &= visitor->Visit("VK_KHR_shader_float16_int8", + &device->ext_shader_float16_int8_features); + } } return ret; } diff --git a/vulkan/vkjson/vkjson.h b/vulkan/vkjson/vkjson.h index 450fb24862..a283b83d7c 100644 --- a/vulkan/vkjson/vkjson.h +++ b/vulkan/vkjson/vkjson.h @@ -72,6 +72,16 @@ struct VkJsonExtVariablePointerFeatures { VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr; }; +struct VkJsonExtShaderFloat16Int8Features { + VkJsonExtShaderFloat16Int8Features() { + reported = false; + memset(&shader_float16_int8_features_khr, 0, + sizeof(VkPhysicalDeviceShaderFloat16Int8FeaturesKHR)); + } + bool reported; + VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_float16_int8_features_khr; +}; + struct VkJsonDevice { VkJsonDevice() { memset(&properties, 0, sizeof(VkPhysicalDeviceProperties)); @@ -101,6 +111,7 @@ struct VkJsonDevice { VkPhysicalDeviceFeatures features; VkJsonExtDriverProperties ext_driver_properties; VkJsonExtVariablePointerFeatures ext_variable_pointer_features; + VkJsonExtShaderFloat16Int8Features ext_shader_float16_int8_features; VkPhysicalDeviceMemoryProperties memory; std::vector<VkQueueFamilyProperties> queues; std::vector<VkExtensionProperties> extensions; diff --git a/vulkan/vkjson/vkjson_instance.cc b/vulkan/vkjson/vkjson_instance.cc index 05d4dfea6c..84cfe5e00b 100644 --- a/vulkan/vkjson/vkjson_instance.cc +++ b/vulkan/vkjson/vkjson_instance.cc @@ -136,6 +136,16 @@ VkJsonDevice VkJsonGetDevice(VkInstance instance, features.pNext = &device.ext_variable_pointer_features.variable_pointer_features_khr; } + if (HasExtension("VK_KHR_shader_float16_int8", device.extensions)) { + device.ext_shader_float16_int8_features.reported = true; + device.ext_shader_float16_int8_features.shader_float16_int8_features_khr + .sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR; + device.ext_shader_float16_int8_features.shader_float16_int8_features_khr + .pNext = features.pNext; + features.pNext = &device.ext_shader_float16_int8_features + .shader_float16_int8_features_khr; + } vkpGetPhysicalDeviceFeatures2KHR(physical_device, &features); device.features = features.features; } else { |