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>
This commit is contained in:
@@ -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;
|
||||
|
||||
/* check encoder support */
|
||||
const uint32_t spec_version =
|
||||
vn_info_extension_spec_version(props->extensionName);
|
||||
if (!spec_version)
|
||||
continue;
|
||||
|
||||
physical_dev->renderer_extensions.extensions[i] = true;
|
||||
physical_dev->extension_spec_versions[i] =
|
||||
MIN2(exts[j].specVersion, spec_version);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
#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 (!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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user