[PATCH 4/5] winevulkan: Implement vkGetDeviceProcAddr.
Józef Kucia
joseph.kucia at gmail.com
Fri Mar 9 10:09:06 CST 2018
On Thu, Mar 8, 2018 at 7:57 AM, Roderick Colenbrander
<thunderbird2k at gmail.com> wrote:
> Signed-off-by: Roderick Colenbrander <thunderbird2k at gmail.com>
> ---
> dlls/winevulkan/make_vulkan | 2 +-
> dlls/winevulkan/vulkan.c | 22 ++++++++++++++++++++++
> dlls/winevulkan/vulkan_thunks.c | 6 ------
> dlls/winevulkan/vulkan_thunks.h | 1 +
> 4 files changed, 24 insertions(+), 7 deletions(-)
>
> diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
> index 698d496a96..35f40c79ce 100755
> --- a/dlls/winevulkan/make_vulkan
> +++ b/dlls/winevulkan/make_vulkan
> @@ -94,7 +94,7 @@ FUNCTION_OVERRIDES = {
> "vkEnumeratePhysicalDevices" : {"dispatch" : True, "driver" : False, "thunk" : False},
>
> # Device functions
> - "vkGetDeviceProcAddr" : {"dispatch" : True, "driver" : True, "thunk" : True},
> + "vkGetDeviceProcAddr" : {"dispatch" : True, "driver" : True, "thunk" : False},
> }
>
>
> diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
> index d5fe25f36a..c3bf11ccfe 100644
> --- a/dlls/winevulkan/vulkan.c
> +++ b/dlls/winevulkan/vulkan.c
> @@ -352,6 +352,28 @@ VkResult WINAPI wine_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *d
> return res;
> }
>
> +PFN_vkVoidFunction WINAPI wine_vkGetDeviceProcAddr(VkDevice device, const char *name)
> +{
> + void *func;
> + TRACE("%p, %s\n", device, debugstr_a(name));
> +
> + /* The spec leaves return value undefined for a NULL device, let's just return NULL. */
> + if (!device || !name)
> + return NULL;
> +
> + /* Per the spec, we are only supposed to return device functions as in functions
> + * for which the first parameter is vkDevice or a child of vkDevice like a
> + * vkCommandBuffer or vkQueue.
> + * Loader takes are of filtering of extensions which are enabled or not.
> + */
> + func = wine_vk_get_device_proc_addr(name);
> + if (func)
> + return func;
> +
> + TRACE("Function %s not found\n", name);
debugstr_a(name)
> + return NULL;
> +}
> +
> static PFN_vkVoidFunction WINAPI wine_vkGetInstanceProcAddr(VkInstance instance, const char *name)
> {
> void *func;
> diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c
> index 99095c60f9..3c90686c59 100644
> --- a/dlls/winevulkan/vulkan_thunks.c
> +++ b/dlls/winevulkan/vulkan_thunks.c
> @@ -690,12 +690,6 @@ static void WINAPI wine_vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMem
> FIXME("stub: %p, 0x%s, %p\n", device, wine_dbgstr_longlong(memory), pCommittedMemoryInBytes);
> }
>
> -static PFN_vkVoidFunction WINAPI wine_vkGetDeviceProcAddr(VkDevice device, const char *pName)
> -{
> - FIXME("stub: %p, %p\n", device, pName);
> - return NULL;
> -}
> -
> static void WINAPI wine_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue)
> {
> FIXME("stub: %p, %u, %u, %p\n", device, queueFamilyIndex, queueIndex, pQueue);
> diff --git a/dlls/winevulkan/vulkan_thunks.h b/dlls/winevulkan/vulkan_thunks.h
> index 49a88968a2..8fd1491779 100644
> --- a/dlls/winevulkan/vulkan_thunks.h
> +++ b/dlls/winevulkan/vulkan_thunks.h
> @@ -17,6 +17,7 @@ VkResult WINAPI wine_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDev
> void WINAPI wine_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) DECLSPEC_HIDDEN;
> VkResult WINAPI wine_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) DECLSPEC_HIDDEN;
> VkResult WINAPI wine_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, VkPhysicalDevice *pPhysicalDevices) DECLSPEC_HIDDEN;
> +PFN_vkVoidFunction WINAPI wine_vkGetDeviceProcAddr(VkDevice device, const char *pName) DECLSPEC_HIDDEN;
>
> typedef struct VkImageFormatProperties_host
> {
> --
> 2.14.3
>
>
>
More information about the wine-devel
mailing list