[PATCH 3/5] vulkan-1: Implement vkEnumerateInstanceExtensionProperties.

Józef Kucia joseph.kucia at gmail.com
Tue Mar 27 17:40:46 CDT 2018


On Tue, Mar 27, 2018 at 9:00 AM, Roderick Colenbrander
<thunderbird2k at gmail.com> wrote:
> Signed-off-by: Roderick Colenbrander <thunderbird2k at gmail.com>
> ---
>  dlls/vulkan-1/vulkan.c | 36 +++++++++++++++++++++++++++++++++---
>  1 file changed, 33 insertions(+), 3 deletions(-)
>
> diff --git a/dlls/vulkan-1/vulkan.c b/dlls/vulkan-1/vulkan.c
> index b8db08a312..e3981b63ef 100644
> --- a/dlls/vulkan-1/vulkan.c
> +++ b/dlls/vulkan-1/vulkan.c
> @@ -27,6 +27,32 @@
>
>  WINE_DEFAULT_DEBUG_CHANNEL(vulkan);
>
> +static VkResult (WINAPI *p_vkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *);
> +static void * (WINAPI *p_vk_icdGetInstanceProcAddr)(VkInstance, const char *);
> +
> +static BOOL vk_loader_init(void)
> +{
> +    HMODULE icd_handle = NULL;
> +
> +    icd_handle = LoadLibraryA("winevulkan.dll");
> +    if (!icd_handle)
> +    {
> +        ERR("Failed to load Vulkan ICD (winevulkan.dll).\n");
> +        return FALSE;
> +    }
> +
> +    p_vk_icdGetInstanceProcAddr = (void *)GetProcAddress(icd_handle, "vk_icdGetInstanceProcAddr");
> +    if (!p_vk_icdGetInstanceProcAddr)
> +        return FALSE;

Is there a reason to load winevulkan.dll dynamically? We could
simplify code by linking to winevulkan.dll. Otherwise, we should
probably take care of unloading winevulkan.dll, e.g. in case of
failures.

> +
> +    p_vkEnumerateInstanceExtensionProperties = p_vk_icdGetInstanceProcAddr(NULL,
> +            "vkEnumerateInstanceExtensionProperties");
> +    if (!p_vkEnumerateInstanceExtensionProperties)
> +        return FALSE;
> +
> +    return TRUE;
> +}
> +
>  VkResult WINAPI vkCreateInstance(const VkInstanceCreateInfo *create_info,
>          const VkAllocationCallbacks *allocator, VkInstance *instance)
>  {
> @@ -37,8 +63,12 @@ VkResult WINAPI vkCreateInstance(const VkInstanceCreateInfo *create_info,
>  VkResult WINAPI vkEnumerateInstanceExtensionProperties(const char *layer_name,
>          uint32_t *count, VkExtensionProperties *properties)
>  {
> -    FIXME("stub: %p %p %p\n", layer_name, count, properties);
> -    return VK_ERROR_OUT_OF_HOST_MEMORY;
> +    TRACE("%p %p %p\n", layer_name, count, properties);
> +
> +    if (layer_name)
> +        return VK_ERROR_LAYER_NOT_PRESENT;
> +
> +    return p_vkEnumerateInstanceExtensionProperties(NULL, count, properties);
>  }
>
>  VkResult WINAPI vkEnumerateInstanceLayerProperties(uint32_t *count, VkLayerProperties *properties)
> @@ -64,7 +94,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved)
>      {
>          case DLL_PROCESS_ATTACH:
>              DisableThreadLibraryCalls(hinst);
> -            return TRUE;
> +            return vk_loader_init();
>      }
>      return TRUE;
>  }
> --
> 2.14.3
>
>
>



More information about the wine-devel mailing list