summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2021-04-30 09:01:28 -0700
committerMarge Bot <eric+marge@anholt.net>2021-05-03 20:51:46 +0000
commit14ce47e04a9ede42bf25e4b8c6d96f5af663c59a (patch)
treec4f3823bbe67f0f8f32103a9c435f8bd03ae9ec3
parentd69f7b3e6a75d5bebee17c6daae0ddd29aaf028e (diff)
venus: refactor vn_physical_device_init_extensions
Split up into two functions, one initializes the renderer extension table and one initializes the supported extension table. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10556>
-rw-r--r--src/virtio/vulkan/vn_device.c111
-rw-r--r--src/virtio/vulkan/vn_device.h7
2 files changed, 68 insertions, 50 deletions
diff --git a/src/virtio/vulkan/vn_device.c b/src/virtio/vulkan/vn_device.c
index 6d924dfe1f8..94a23182557 100644
--- a/src/virtio/vulkan/vn_device.c
+++ b/src/virtio/vulkan/vn_device.c
@@ -1502,8 +1502,54 @@ vn_physical_device_get_supported_extensions(
};
}
+static void
+vn_physical_device_init_supported_extensions(
+ struct vn_physical_device *physical_dev)
+{
+ struct vk_device_extension_table supported;
+ struct vk_device_extension_table recognized;
+ vn_physical_device_get_supported_extensions(physical_dev, &supported,
+ &recognized);
+
+ for (uint32_t i = 0; i < VK_DEVICE_EXTENSION_COUNT; i++) {
+ const VkExtensionProperties *props = &vk_device_extensions[i];
+
+#ifdef ANDROID
+ if (!vk_android_allowed_device_extensions.extensions[i])
+ continue;
+#endif
+
+ /* does not depend on renderer (e.g., WSI) */
+ if (supported.extensions[i]) {
+ physical_dev->base.base.supported_extensions.extensions[i] = true;
+ physical_dev->extension_spec_versions[i] = props->specVersion;
+#ifdef ANDROID
+ /* override VK_ANDROID_native_buffer spec version */
+ if (!strcmp(props->extensionName,
+ VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME))
+ physical_dev->extension_spec_versions[i] =
+ VN_ANDROID_NATIVE_BUFFER_SPEC_VERSION;
+#endif
+ continue;
+ }
+
+ /* no driver support */
+ if (!recognized.extensions[i])
+ continue;
+
+ /* check renderer support */
+ if (!physical_dev->renderer_extensions.extensions[i])
+ continue;
+
+ physical_dev->base.base.supported_extensions.extensions[i] = true;
+ physical_dev->extension_spec_versions[i] =
+ MIN2(physical_dev->extension_spec_versions[i], props->specVersion);
+ }
+}
+
static VkResult
-vn_physical_device_init_extensions(struct vn_physical_device *physical_dev)
+vn_physical_device_init_renderer_extensions(
+ struct vn_physical_device *physical_dev)
{
struct vn_instance *instance = physical_dev->instance;
const VkAllocationCallbacks *alloc = &instance->base.base.alloc;
@@ -1532,11 +1578,6 @@ vn_physical_device_init_extensions(struct vn_physical_device *physical_dev)
}
}
- struct vk_device_extension_table supported;
- struct vk_device_extension_table recognized;
- vn_physical_device_get_supported_extensions(physical_dev, &supported,
- &recognized);
-
physical_dev->extension_spec_versions =
vk_zalloc(alloc,
sizeof(*physical_dev->extension_spec_versions) *
@@ -1549,52 +1590,22 @@ vn_physical_device_init_extensions(struct vn_physical_device *physical_dev)
for (uint32_t i = 0; i < VK_DEVICE_EXTENSION_COUNT; i++) {
const VkExtensionProperties *props = &vk_device_extensions[i];
- const VkExtensionProperties *renderer_props = NULL;
-
for (uint32_t j = 0; j < count; j++) {
- if (!strcmp(props->extensionName, exts[j].extensionName)) {
- physical_dev->renderer_extensions.extensions[i] = true;
- renderer_props = &exts[j];
- break;
- }
- }
+ if (strcmp(props->extensionName, exts[j].extensionName))
+ continue;
-#ifdef ANDROID
- if (!vk_android_allowed_device_extensions.extensions[i])
- continue;
-#endif
+ /* check encoder support */
+ const uint32_t spec_version =
+ vn_info_extension_spec_version(props->extensionName);
+ if (!spec_version)
+ continue;
- /* does not depend on renderer (e.g., WSI) */
- if (supported.extensions[i]) {
- physical_dev->base.base.supported_extensions.extensions[i] = true;
- physical_dev->extension_spec_versions[i] = props->specVersion;
-#ifdef ANDROID
- /* override VK_ANDROID_native_buffer spec version */
- if (!strcmp(props->extensionName,
- VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME))
- physical_dev->extension_spec_versions[i] =
- VN_ANDROID_NATIVE_BUFFER_SPEC_VERSION;
-#endif
- continue;
- }
-
- /* no driver support */
- if (!recognized.extensions[i])
- continue;
+ physical_dev->renderer_extensions.extensions[i] = true;
+ physical_dev->extension_spec_versions[i] =
+ MIN2(exts[j].specVersion, spec_version);
- /* check renderer support */
- if (!renderer_props)
- continue;
-
- /* check encoder support */
- const uint32_t spec_version =
- vn_info_extension_spec_version(props->extensionName);
- if (!spec_version)
- continue;
-
- physical_dev->base.base.supported_extensions.extensions[i] = true;
- physical_dev->extension_spec_versions[i] =
- MIN2(renderer_props->specVersion, spec_version);
+ break;
+ }
}
vk_free(alloc, exts);
@@ -1642,10 +1653,12 @@ vn_physical_device_init(struct vn_physical_device *physical_dev)
if (result != VK_SUCCESS)
return result;
- result = vn_physical_device_init_extensions(physical_dev);
+ result = vn_physical_device_init_renderer_extensions(physical_dev);
if (result != VK_SUCCESS)
return result;
+ vn_physical_device_init_supported_extensions(physical_dev);
+
/* TODO query all caps with minimal round trips */
vn_physical_device_init_features(physical_dev);
vn_physical_device_init_properties(physical_dev);
diff --git a/src/virtio/vulkan/vn_device.h b/src/virtio/vulkan/vn_device.h
index c2bac2425ac..afd8dcdb0a2 100644
--- a/src/virtio/vulkan/vn_device.h
+++ b/src/virtio/vulkan/vn_device.h
@@ -82,8 +82,13 @@ struct vn_physical_device {
*/
uint32_t renderer_version;
+ /* Between the driver and the app, base.base.supported_extensions is what
+ * we advertise.
+ *
+ * Between the driver and the renderer, renderer_extensions is what we can
+ * use internally (after enabling).
+ */
struct vk_device_extension_table renderer_extensions;
-
uint32_t *extension_spec_versions;
VkPhysicalDeviceFeatures2 features;