aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-08-31 07:32:03 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-08-31 07:32:03 +0000
commitce54fe72dcb23036a825a003a8a98a7d8eb04722 (patch)
tree86f43922a290672c30b9b32ce9fd7a4384a372f1
parente3b0f1946f428991922ccd2a42eed7656a3b3a4d (diff)
parent73bf24cb361d3b2163cd0e124aff01b5308ad9d5 (diff)
downloadvulkan-validation-layers-android-8.1.0_r52.tar.gz
release-request-fd631211-effa-4885-9314-559fcbd0a094-for-git_oc-mr1-release-4308825 snap-temp-L52700000098265170android-wear-8.1.0_r1android-vts-8.1_r9android-vts-8.1_r8android-vts-8.1_r7android-vts-8.1_r6android-vts-8.1_r5android-vts-8.1_r4android-vts-8.1_r3android-vts-8.1_r14android-vts-8.1_r13android-vts-8.1_r12android-vts-8.1_r11android-vts-8.1_r10android-security-8.1.0_r93android-security-8.1.0_r92android-security-8.1.0_r91android-security-8.1.0_r90android-security-8.1.0_r89android-security-8.1.0_r88android-security-8.1.0_r87android-security-8.1.0_r86android-security-8.1.0_r85android-security-8.1.0_r84android-security-8.1.0_r83android-security-8.1.0_r82android-cts-8.1_r9android-cts-8.1_r8android-cts-8.1_r7android-cts-8.1_r6android-cts-8.1_r5android-cts-8.1_r4android-cts-8.1_r3android-cts-8.1_r25android-cts-8.1_r24android-cts-8.1_r23android-cts-8.1_r22android-cts-8.1_r21android-cts-8.1_r20android-cts-8.1_r2android-cts-8.1_r19android-cts-8.1_r18android-cts-8.1_r17android-cts-8.1_r16android-cts-8.1_r15android-cts-8.1_r14android-cts-8.1_r13android-cts-8.1_r12android-cts-8.1_r11android-cts-8.1_r10android-cts-8.1_r1android-8.1.0_r9android-8.1.0_r81android-8.1.0_r80android-8.1.0_r8android-8.1.0_r79android-8.1.0_r78android-8.1.0_r77android-8.1.0_r76android-8.1.0_r75android-8.1.0_r74android-8.1.0_r73android-8.1.0_r72android-8.1.0_r71android-8.1.0_r70android-8.1.0_r7android-8.1.0_r69android-8.1.0_r68android-8.1.0_r67android-8.1.0_r66android-8.1.0_r65android-8.1.0_r64android-8.1.0_r63android-8.1.0_r62android-8.1.0_r61android-8.1.0_r60android-8.1.0_r6android-8.1.0_r53android-8.1.0_r52android-8.1.0_r51android-8.1.0_r50android-8.1.0_r5android-8.1.0_r48android-8.1.0_r47android-8.1.0_r46android-8.1.0_r45android-8.1.0_r43android-8.1.0_r42android-8.1.0_r41android-8.1.0_r40android-8.1.0_r4android-8.1.0_r39android-8.1.0_r38android-8.1.0_r37android-8.1.0_r36android-8.1.0_r35android-8.1.0_r33android-8.1.0_r32android-8.1.0_r31android-8.1.0_r30android-8.1.0_r3android-8.1.0_r29android-8.1.0_r28android-8.1.0_r27android-8.1.0_r26android-8.1.0_r25android-8.1.0_r23android-8.1.0_r22android-8.1.0_r21android-8.1.0_r20android-8.1.0_r2android-8.1.0_r19android-8.1.0_r18android-8.1.0_r17android-8.1.0_r16android-8.1.0_r15android-8.1.0_r14android-8.1.0_r13android-8.1.0_r12android-8.1.0_r11android-8.1.0_r10android-8.1.0_r1security-oc-mr1-releaseoreo-mr1-wear-releaseoreo-mr1-vts-releaseoreo-mr1-security-releaseoreo-mr1-s1-releaseoreo-mr1-releaseoreo-mr1-cuttlefish-testingoreo-mr1-cts-releaseoreo-m8-releaseoreo-m7-releaseoreo-m6-s4-releaseoreo-m6-s3-releaseoreo-m6-s2-releaseoreo-m5-releaseoreo-m4-s9-releaseoreo-m4-s8-releaseoreo-m4-s7-releaseoreo-m4-s6-releaseoreo-m4-s5-releaseoreo-m4-s4-releaseoreo-m4-s3-releaseoreo-m4-s2-releaseoreo-m4-s12-releaseoreo-m4-s11-releaseoreo-m4-s10-releaseoreo-m4-s1-releaseoreo-m3-releaseoreo-m2-s5-releaseoreo-m2-s4-releaseoreo-m2-s3-releaseoreo-m2-s2-releaseoreo-m2-s1-releaseoreo-m2-release
Change-Id: Ie3c556ead353c19853791004a45a909127ac5163
-rw-r--r--Android.bp23
-rw-r--r--libs/vkjson/Android.bp5
-rw-r--r--libs/vkjson/vkjson.cc11
-rw-r--r--libs/vkjson/vkjson.h10
-rw-r--r--libs/vkjson/vkjson_instance.cc87
5 files changed, 93 insertions, 43 deletions
diff --git a/Android.bp b/Android.bp
index 7c2da7992..e95bc5d51 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,26 +1,3 @@
-cc_library_headers {
- name: "vk_headers",
- clang: true,
- local_include_dirs: [
- "include",
- ],
- export_include_dirs: [
- "include",
- ],
-}
-
-cc_library_headers {
- name: "vk_headers_ndk",
- clang: true,
- local_include_dirs: [
- "include",
- ],
- export_include_dirs: [
- "include",
- ],
- sdk_version: "24",
-}
-
subdirs = [
"libs/cjson",
"libs/vkjson",
diff --git a/libs/vkjson/Android.bp b/libs/vkjson/Android.bp
index 63de5c1ef..d50c149de 100644
--- a/libs/vkjson/Android.bp
+++ b/libs/vkjson/Android.bp
@@ -1,6 +1,5 @@
cc_library_static {
name: "libvkjson",
- clang: true,
srcs: [
"vkjson.cc",
"vkjson_instance.cc",
@@ -16,7 +15,7 @@ cc_library_static {
"cjson",
],
header_libs: [
- "vk_headers",
+ "vulkan_headers",
],
}
@@ -38,7 +37,7 @@ cc_library_static {
"cjson_ndk",
],
header_libs: [
- "vk_headers_ndk",
+ "vulkan_headers_ndk",
],
sdk_version: "24",
stl: "libc++_static",
diff --git a/libs/vkjson/vkjson.cc b/libs/vkjson/vkjson.cc
index aa3719d5f..a1068f18e 100644
--- a/libs/vkjson/vkjson.cc
+++ b/libs/vkjson/vkjson.cc
@@ -33,7 +33,6 @@
#include <utility>
#include <cJSON.h>
-#include <vulkan/vk_sdk_platform.h>
namespace {
@@ -271,6 +270,14 @@ inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) {
}
template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+ VkPhysicalDeviceVariablePointerFeaturesKHR* features) {
+ return visitor->Visit("variablePointersStorageBuffer",
+ &features->variablePointersStorageBuffer) &&
+ visitor->Visit("variablePointers", &features->variablePointers);
+}
+
+template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkMemoryType* type) {
return
visitor->Visit("propertyFlags", &type->propertyFlags) &&
@@ -336,6 +343,8 @@ template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonDevice* device) {
return visitor->Visit("properties", &device->properties) &&
visitor->Visit("features", &device->features) &&
+ visitor->Visit("variablePointersFeaturesKHR",
+ &device->variable_pointer_features) &&
visitor->Visit("memory", &device->memory) &&
visitor->Visit("queues", &device->queues) &&
visitor->Visit("extensions", &device->extensions) &&
diff --git a/libs/vkjson/vkjson.h b/libs/vkjson/vkjson.h
index b70375049..af3b37f6b 100644
--- a/libs/vkjson/vkjson.h
+++ b/libs/vkjson/vkjson.h
@@ -42,10 +42,13 @@ struct VkJsonDevice {
VkJsonDevice() {
memset(&properties, 0, sizeof(VkPhysicalDeviceProperties));
memset(&features, 0, sizeof(VkPhysicalDeviceFeatures));
+ memset(&variable_pointer_features, 0,
+ sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR));
memset(&memory, 0, sizeof(VkPhysicalDeviceMemoryProperties));
}
VkPhysicalDeviceProperties properties;
VkPhysicalDeviceFeatures features;
+ VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features;
VkPhysicalDeviceMemoryProperties memory;
std::vector<VkQueueFamilyProperties> queues;
std::vector<VkExtensionProperties> extensions;
@@ -65,7 +68,10 @@ bool VkJsonInstanceFromJson(const std::string& json,
VkJsonInstance* instance,
std::string* errors);
-VkJsonDevice VkJsonGetDevice(VkPhysicalDevice device);
+VkJsonDevice VkJsonGetDevice(VkInstance instance,
+ VkPhysicalDevice device,
+ uint32_t instanceExtensionCount,
+ const char* const* instanceExtensions);
std::string VkJsonDeviceToJson(const VkJsonDevice& device);
bool VkJsonDeviceFromJson(const std::string& json,
VkJsonDevice* device,
@@ -81,7 +87,7 @@ bool VkJsonImageFormatPropertiesFromJson(const std::string& json,
typedef VkJsonDevice VkJsonAllProperties;
inline VkJsonAllProperties VkJsonGetAllProperties(
VkPhysicalDevice physicalDevice) {
- return VkJsonGetDevice(physicalDevice);
+ return VkJsonGetDevice(VK_NULL_HANDLE, physicalDevice, 0, nullptr);
}
inline std::string VkJsonAllPropertiesToJson(
const VkJsonAllProperties& properties) {
diff --git a/libs/vkjson/vkjson_instance.cc b/libs/vkjson/vkjson_instance.cc
index 7784d5392..c3b9e47d4 100644
--- a/libs/vkjson/vkjson_instance.cc
+++ b/libs/vkjson/vkjson_instance.cc
@@ -24,6 +24,9 @@
#include <utility>
namespace {
+const char* kSupportedInstanceExtensions[] = {
+ "VK_KHR_get_physical_device_properties2"};
+
bool EnumerateExtensions(const char* layer_name,
std::vector<VkExtensionProperties>* extensions) {
VkResult result;
@@ -39,21 +42,39 @@ bool EnumerateExtensions(const char* layer_name,
return true;
}
+bool HasExtension(const char* extension_name,
+ uint32_t count,
+ const char* const* extensions) {
+ return std::find_if(extensions, extensions + count,
+ [extension_name](const char* extension) {
+ return strcmp(extension, extension_name) == 0;
+ }) != extensions + count;
+}
+
+bool HasExtension(const char* extension_name,
+ const std::vector<VkExtensionProperties>& extensions) {
+ return std::find_if(extensions.cbegin(), extensions.cend(),
+ [extension_name](const VkExtensionProperties& extension) {
+ return strcmp(extension.extensionName,
+ extension_name) == 0;
+ }) != extensions.cend();
+}
} // anonymous namespace
-VkJsonDevice VkJsonGetDevice(VkPhysicalDevice physical_device) {
+VkJsonDevice VkJsonGetDevice(VkInstance instance,
+ VkPhysicalDevice physical_device,
+ uint32_t instance_extension_count,
+ const char* const* instance_extensions) {
VkJsonDevice device;
- vkGetPhysicalDeviceProperties(physical_device, &device.properties);
- vkGetPhysicalDeviceFeatures(physical_device, &device.features);
- vkGetPhysicalDeviceMemoryProperties(physical_device, &device.memory);
- uint32_t queue_family_count = 0;
- vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &queue_family_count,
- nullptr);
- if (queue_family_count > 0) {
- device.queues.resize(queue_family_count);
- vkGetPhysicalDeviceQueueFamilyProperties(
- physical_device, &queue_family_count, device.queues.data());
+ PFN_vkGetPhysicalDeviceFeatures2KHR vkpGetPhysicalDeviceFeatures2KHR =
+ nullptr;
+ if (instance != VK_NULL_HANDLE &&
+ HasExtension("VK_KHR_get_physical_device_properties2",
+ instance_extension_count, instance_extensions)) {
+ vkpGetPhysicalDeviceFeatures2KHR =
+ reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2KHR>(
+ vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2KHR"));
}
// Only device extensions.
@@ -75,6 +96,36 @@ VkJsonDevice VkJsonGetDevice(VkPhysicalDevice physical_device) {
device.layers.data());
}
+ vkGetPhysicalDeviceProperties(physical_device, &device.properties);
+ if (HasExtension("VK_KHR_get_physical_device_properties2",
+ instance_extension_count, instance_extensions)) {
+ VkPhysicalDeviceFeatures2KHR features = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
+ nullptr,
+ {} // features
+ };
+ if (HasExtension("VK_KHR_variable_pointers", device.extensions)) {
+ device.variable_pointer_features.sType =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR;
+ device.variable_pointer_features.pNext = features.pNext;
+ features.pNext = &device.variable_pointer_features;
+ }
+ vkpGetPhysicalDeviceFeatures2KHR(physical_device, &features);
+ device.features = features.features;
+ } else {
+ vkGetPhysicalDeviceFeatures(physical_device, &device.features);
+ }
+ vkGetPhysicalDeviceMemoryProperties(physical_device, &device.memory);
+
+ uint32_t queue_family_count = 0;
+ vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &queue_family_count,
+ nullptr);
+ if (queue_family_count > 0) {
+ device.queues.resize(queue_family_count);
+ vkGetPhysicalDeviceQueueFamilyProperties(
+ physical_device, &queue_family_count, device.queues.data());
+ }
+
VkFormatProperties format_properties = {};
for (VkFormat format = VK_FORMAT_R4G4_UNORM_PACK8;
format <= VK_FORMAT_END_RANGE;
@@ -116,6 +167,12 @@ VkJsonInstance VkJsonGetInstance() {
if (!EnumerateExtensions(nullptr, &instance.extensions))
return VkJsonInstance();
+ std::vector<const char*> instance_extensions;
+ for (const auto extension : kSupportedInstanceExtensions) {
+ if (HasExtension(extension, instance.extensions))
+ instance_extensions.push_back(extension);
+ }
+
const VkApplicationInfo app_info = {VK_STRUCTURE_TYPE_APPLICATION_INFO,
nullptr,
"vkjson_info",
@@ -130,8 +187,8 @@ VkJsonInstance VkJsonGetInstance() {
&app_info,
0,
nullptr,
- 0,
- nullptr};
+ static_cast<uint32_t>(instance_extensions.size()),
+ instance_extensions.data()};
VkInstance vkinstance;
result = vkCreateInstance(&instance_info, nullptr, &vkinstance);
if (result != VK_SUCCESS)
@@ -152,7 +209,9 @@ VkJsonInstance VkJsonGetInstance() {
instance.devices.reserve(devices.size());
for (auto device : devices)
- instance.devices.emplace_back(VkJsonGetDevice(device));
+ instance.devices.emplace_back(VkJsonGetDevice(vkinstance, device,
+ instance_extensions.size(),
+ instance_extensions.data()));
vkDestroyInstance(vkinstance, nullptr);
return instance;