zink/codegen: codegen-ize load_instance_extensions()

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8521>
This commit is contained in:
Hoe Hao Cheng 2021-01-15 17:16:54 +08:00 committed by Marge Bot
parent c0259e5c6e
commit a454c562d6
2 changed files with 38 additions and 36 deletions

View file

@ -59,6 +59,9 @@ struct zink_instance_info {
VkInstance
zink_create_instance(struct zink_screen *screen);
bool
zink_load_instance_extensions(struct zink_screen *screen);
#endif
"""
@ -193,6 +196,40 @@ zink_create_instance(struct zink_screen *screen)
return instance;
}
bool
zink_load_instance_extensions(struct zink_screen *screen)
{
if (zink_debug & ZINK_DEBUG_VALIDATION) {
printf("zink: Loader %d.%d.%d \\n", VK_VERSION_MAJOR(screen->loader_version), VK_VERSION_MINOR(screen->loader_version), VK_VERSION_PATCH(screen->loader_version));
}
%for ext in extensions:
%if bool(ext.instance_funcs) and not ext.core_since:
if (screen->instance_info.have_${ext.name_with_vendor()}) {
%for func in ext.instance_funcs:
GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, ${func}${ext.vendor()});
screen->vk_${func} = vk_${func}${ext.vendor()};
%endfor
}
%elif bool(ext.instance_funcs):
if (screen->instance_info.have_${ext.name_with_vendor()}) {
if (screen->loader_version < ${ext.core_since.version()}) {
%for func in ext.instance_funcs:
GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, ${func}${ext.vendor()});
screen->vk_${func} = vk_${func}${ext.vendor()};
%endfor
} else {
%for func in ext.instance_funcs:
GET_PROC_ADDR_INSTANCE(${func});
%endfor
}
}
%endif
%endfor
return true;
}
"""

View file

@ -827,41 +827,6 @@ zink_get_format(struct zink_screen *screen, enum pipe_format format)
return ret;
}
static bool
load_instance_extensions(struct zink_screen *screen)
{
if (zink_debug & ZINK_DEBUG_VALIDATION) {
printf("zink: Loader %d.%d.%d \n", VK_VERSION_MAJOR(screen->loader_version), VK_VERSION_MINOR(screen->loader_version), VK_VERSION_PATCH(screen->loader_version));
}
if (screen->instance_info.have_KHR_get_physical_device_properties2 &&
!(VK_MAKE_VERSION(1,1,0) <= screen->loader_version)) {
// Not Vk 1.1+ so if VK_KHR_get_physical_device_properties2 the use it
GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, GetPhysicalDeviceFeatures2KHR);
GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, GetPhysicalDeviceProperties2KHR);
screen->vk_GetPhysicalDeviceFeatures2 = vk_GetPhysicalDeviceFeatures2KHR;
screen->vk_GetPhysicalDeviceProperties2 = vk_GetPhysicalDeviceProperties2KHR;
} else if (VK_MAKE_VERSION(1,1,0) <= screen->loader_version) {
// Get Vk 1.1+ Instance functions
GET_PROC_ADDR_INSTANCE(GetPhysicalDeviceFeatures2);
GET_PROC_ADDR_INSTANCE(GetPhysicalDeviceProperties2);
}
if (screen->instance_info.have_KHR_draw_indirect_count &&
!(VK_MAKE_VERSION(1,1,0) <= screen->loader_version)) {
GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, CmdDrawIndirectCountKHR);
GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, CmdDrawIndexedIndirectCountKHR);
screen->vk_CmdDrawIndirectCount = vk_CmdDrawIndirectCountKHR;
screen->vk_CmdDrawIndexedIndirectCount = vk_CmdDrawIndexedIndirectCountKHR;
} else if (VK_MAKE_VERSION(1,2,0) <= screen->loader_version) {
// Get Vk 1.1+ Instance functions
GET_PROC_ADDR_INSTANCE(CmdDrawIndirectCount);
GET_PROC_ADDR_INSTANCE(CmdDrawIndexedIndirectCount);
}
return true;
}
static bool
load_device_extensions(struct zink_screen *screen)
{
@ -1094,7 +1059,7 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
if (!screen->instance)
goto fail;
if (!load_instance_extensions(screen))
if (!zink_load_instance_extensions(screen))
goto fail;
if (screen->instance_info.have_EXT_debug_utils && !create_debug(screen))