[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