venus: refactor vn_physical_device_init_supported_extensions

Native extensions are those do not require direct renderer support.
Passthrough extensions are those require direct renderer support.

Native extensions usually require translation to other extensions that
the renderer supports.

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:
Chia-I Wu
2021-04-30 09:46:49 -07:00
committed by Marge Bot
parent c44225c20b
commit dc73489a38

View File

@@ -1437,12 +1437,11 @@ vn_physical_device_init_external_semaphore_handles(
}
static void
vn_physical_device_get_supported_extensions(
const struct vn_physical_device *device,
struct vk_device_extension_table *supported,
struct vk_device_extension_table *recognized)
vn_physical_device_get_native_extensions(
const struct vn_physical_device *physical_dev,
struct vk_device_extension_table *exts)
{
*supported = (struct vk_device_extension_table){
*exts = (struct vk_device_extension_table){
#ifdef VN_USE_WSI_PLATFORM
.KHR_incremental_present = true,
.KHR_swapchain = true,
@@ -1452,8 +1451,14 @@ vn_physical_device_get_supported_extensions(
.ANDROID_native_buffer = true,
#endif
};
}
*recognized = (struct vk_device_extension_table){
static void
vn_physical_device_get_passthrough_extensions(
const struct vn_physical_device *physical_dev,
struct vk_device_extension_table *exts)
{
*exts = (struct vk_device_extension_table){
/* promoted to VK_VERSION_1_1 */
.KHR_16bit_storage = true,
.KHR_bind_memory2 = true,
@@ -1511,10 +1516,10 @@ 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);
struct vk_device_extension_table native;
struct vk_device_extension_table passthrough;
vn_physical_device_get_native_extensions(physical_dev, &native);
vn_physical_device_get_passthrough_extensions(physical_dev, &passthrough);
for (uint32_t i = 0; i < VK_DEVICE_EXTENSION_COUNT; i++) {
const VkExtensionProperties *props = &vk_device_extensions[i];
@@ -1524,30 +1529,21 @@ vn_physical_device_init_supported_extensions(
continue;
#endif
/* does not depend on renderer (e.g., WSI) */
if (supported.extensions[i]) {
if (native.extensions[i]) {
physical_dev->base.base.supported_extensions.extensions[i] = true;
physical_dev->extension_spec_versions[i] = props->specVersion;
continue;
} else if (passthrough.extensions[i] &&
physical_dev->renderer_extensions.extensions[i]) {
physical_dev->base.base.supported_extensions.extensions[i] = true;
physical_dev->extension_spec_versions[i] = MIN2(
physical_dev->extension_spec_versions[i], props->specVersion);
}
/* 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);
}
/* override VK_ANDROID_native_buffer spec version */
if (supported.ANDROID_native_buffer) {
if (native.ANDROID_native_buffer) {
const uint32_t index =
VN_EXTENSION_TABLE_INDEX(supported, ANDROID_native_buffer);
VN_EXTENSION_TABLE_INDEX(native, ANDROID_native_buffer);
physical_dev->extension_spec_versions[index] =
VN_ANDROID_NATIVE_BUFFER_SPEC_VERSION;
}