zink: avoid generating nonsensical code

With this code, we end up generating code such as:

if (!strcmp(extensions[i].extensionName, "VK_KHR_maintenance1")) {
   if (VK_MAKE_VERSION(1,2,0) >= screen->vk_version) {
      info->have_KHR_maintenance1 = true;
   } else {
      info->have_KHR_maintenance1 = true;
   }
}

That's clearly nonsense, as it does the same thing in the true and false
case. So let's instead try to walk the Vulkan versions up to the one
we're using in a separate pass, and add all extensions that were made core
in that version.

CID: 1473289

Reviewed-by: Hoe Hao Cheng <haochengho12907@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12593>
This commit is contained in:
Erik Faye-Lund 2021-08-25 21:51:44 +02:00 committed by Marge Bot
parent a00fccce0c
commit 4b8f2b99e8
1 changed files with 16 additions and 20 deletions

View File

@ -329,30 +329,10 @@ zink_get_physical_device_info(struct zink_screen *screen)
%for ext in extensions:
<%helpers:guard ext="${ext}">
if (!strcmp(extensions[i].extensionName, "${ext.name}")) {
%if ext.core_since:
%for version in versions:
%if ext.core_since.struct_version == version.struct_version:
if (${version.version()} >= screen->vk_version) {
%if not (ext.has_features or ext.has_properties):
info->have_${ext.name_with_vendor()} = true;
%else:
support_${ext.name_with_vendor()} = true;
%endif
} else {
%if not (ext.has_features or ext.has_properties):
info->have_${ext.name_with_vendor()} = true;
%else:
support_${ext.name_with_vendor()} = true;
%endif
}
%endif
%endfor
%else:
%if not (ext.has_features or ext.has_properties):
info->have_${ext.name_with_vendor()} = true;
%else:
support_${ext.name_with_vendor()} = true;
%endif
%endif
}
</%helpers:guard>
@ -363,6 +343,22 @@ zink_get_physical_device_info(struct zink_screen *screen)
}
}
%for version in versions:
if (${version.version()} <= screen->vk_version) {
%for ext in extensions:
%if ext.core_since and ext.core_since.struct_version == version.struct_version:
<%helpers:guard ext="${ext}">
%if not (ext.has_features or ext.has_properties):
info->have_${ext.name_with_vendor()} = true;
%else:
support_${ext.name_with_vendor()} = true;
%endif
</%helpers:guard>
%endif
%endfor
}
%endfor
// get device features
if (screen->vk.GetPhysicalDeviceFeatures2) {
// check for device extension features