diff options
-rw-r--r-- | src/intel/vulkan/anv_device.c | 27 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 11 |
2 files changed, 30 insertions, 8 deletions
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 4cb9cc453e6..e7138886300 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -610,20 +610,33 @@ VkResult anv_CreateInstance( else instance->alloc = default_alloc; - if (pCreateInfo->pApplicationInfo && - pCreateInfo->pApplicationInfo->apiVersion != 0) { - instance->apiVersion = pCreateInfo->pApplicationInfo->apiVersion; - } else { - anv_EnumerateInstanceVersion(&instance->apiVersion); + instance->app_info = (struct anv_app_info) { .api_version = 0 }; + if (pCreateInfo->pApplicationInfo) { + const VkApplicationInfo *app = pCreateInfo->pApplicationInfo; + + instance->app_info.app_name = + vk_strdup(&instance->alloc, app->pApplicationName, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + instance->app_info.app_version = app->applicationVersion; + + instance->app_info.engine_name = + vk_strdup(&instance->alloc, app->pEngineName, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + instance->app_info.engine_version = app->engineVersion; + + instance->app_info.api_version = app->apiVersion; } + if (instance->app_info.api_version == 0) + anv_EnumerateInstanceVersion(&instance->app_info.api_version); + instance->enabled_extensions = enabled_extensions; for (unsigned i = 0; i < ARRAY_SIZE(instance->dispatch.entrypoints); i++) { /* Vulkan requires that entrypoints for extensions which have not been * enabled must not be advertised. */ - if (!anv_entrypoint_is_enabled(i, instance->apiVersion, + if (!anv_entrypoint_is_enabled(i, instance->app_info.api_version, &instance->enabled_extensions, NULL)) { instance->dispatch.entrypoints[i] = NULL; } else if (anv_dispatch_table.entrypoints[i] != NULL) { @@ -1503,7 +1516,7 @@ anv_device_init_dispatch(struct anv_device *device) /* Vulkan requires that entrypoints for extensions which have not been * enabled must not be advertised. */ - if (!anv_entrypoint_is_enabled(i, device->instance->apiVersion, + if (!anv_entrypoint_is_enabled(i, device->instance->app_info.api_version, &device->instance->enabled_extensions, &device->enabled_extensions)) { device->dispatch.entrypoints[i] = NULL; diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 2ced8afcabe..5537c8cab57 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -882,12 +882,21 @@ struct anv_physical_device { int master_fd; }; +struct anv_app_info { + const char* app_name; + uint32_t app_version; + const char* engine_name; + uint32_t engine_version; + uint32_t api_version; +}; + struct anv_instance { VK_LOADER_DATA _loader_data; VkAllocationCallbacks alloc; - uint32_t apiVersion; + struct anv_app_info app_info; + struct anv_instance_extension_table enabled_extensions; struct anv_dispatch_table dispatch; |