[PATCH vkd3d 3/3] Add support for MoltenVK on Mac OS.
Henri Verbeet
hverbeet at gmail.com
Thu Aug 2 19:36:18 CDT 2018
On 2 August 2018 at 21:23, Chip Davis <cdavis at codeweavers.com> wrote:
> Both demo programs run flawlessly. Unfortunately, the d3d12 test is
> broken, due to Metal getting an invalid pixel format. This needs
> investigation and perhaps fixing on the MoltenVK side.
>
> Signed-off-by: Chip Davis <cdavis at codeweavers.com>
> ---
> Makefile.am | 6 +-
> configure.ac | 21 +-
> demos/demo.h | 4 +
> demos/demo_mvk.h | 666 +++++++++++++++++++++++++
> libs/vkd3d-utils/vkd3d_utils_main.c | 4 +
> libs/vkd3d-utils/vkd3d_utils_private.h | 5 +
> libs/vkd3d/device.c | 10 +-
> tests/vkd3d_api.c | 16 +
> 8 files changed, 727 insertions(+), 5 deletions(-)
> create mode 100644 demos/demo_mvk.h
>
Objective-C is a blocker, I'm afraid. But, regardless:
> diff --git a/demos/demo.h b/demos/demo.h
> index 2869ea7..de8eae0 100644
> --- a/demos/demo.h
> +++ b/demos/demo.h
> @@ -143,5 +143,9 @@ static inline HRESULT demo_create_root_signature(ID3D12Device *device,
> #else
> #include <vkd3d_utils.h>
> #define INFINITE VKD3D_INFINITE
> +#ifdef __APPLE__
> +#include "demo_mvk.h"
> +#else
> #include "demo_xcb.h"
> #endif
> +#endif
This should check for XCB/MoltenVK, rather than for Apple.
> diff --git a/libs/vkd3d-utils/vkd3d_utils_private.h b/libs/vkd3d-utils/vkd3d_utils_private.h
> index 6aa0df6..a59f471 100644
> --- a/libs/vkd3d-utils/vkd3d_utils_private.h
> +++ b/libs/vkd3d-utils/vkd3d_utils_private.h
> @@ -20,7 +20,12 @@
> #define __VKD3D_UTILS_PRIVATE_H
>
> #define VK_NO_PROTOTYPES
> +
> +#ifdef __APPLE__
> +#define VK_USE_PLATFORM_MACOS_MVK
> +#else
> #define VK_USE_PLATFORM_XCB_KHR
> +#endif
Likewise.
> diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
> index 6fa0017..0052eba 100644
> --- a/libs/vkd3d/device.c
> +++ b/libs/vkd3d/device.c
> @@ -205,6 +205,12 @@ static HRESULT vkd3d_init_instance_caps(struct vkd3d_instance *instance,
> return S_OK;
> }
>
> +#ifdef HAVE_MOLTENVK_VK_MVK_MOLTENVK_H
> +#define VULKAN_SO_NAME "libMoltenVK.dylib"
> +#else
> +#define VULKAN_SO_NAME "libvulkan.so.1"
> +#endif
That belongs in configure.
> diff --git a/tests/vkd3d_api.c b/tests/vkd3d_api.c
> index e2d9d01..3980b4e 100644
> --- a/tests/vkd3d_api.c
> +++ b/tests/vkd3d_api.c
> @@ -19,8 +19,12 @@
> #define COBJMACROS
> #define INITGUID
> #define WIDL_C_INLINE_WRAPPERS
> +#ifdef __APPLE__
> +#define VK_USE_PLATFORM_MACOS_MVK
> +#else
> #define VK_USE_PLATFORM_XCB_KHR
> #define VK_USE_PLATFORM_XLIB_KHR
> +#endif
> #include "vkd3d_test.h"
> #include <vkd3d.h>
>
> @@ -215,8 +219,12 @@ static void test_additional_instance_extensions(void)
> struct vulkan_extension extensions[] =
> {
> {VK_KHR_SURFACE_EXTENSION_NAME},
> +#ifdef __APPLE__
> + {VK_MVK_MACOS_SURFACE_EXTENSION_NAME},
> +#else
> {VK_KHR_XCB_SURFACE_EXTENSION_NAME},
> {VK_KHR_XLIB_SURFACE_EXTENSION_NAME},
> +#endif
> };
>
> const char *enabled_extensions[ARRAY_SIZE(extensions)];
> @@ -249,6 +257,13 @@ static void test_additional_instance_extensions(void)
> if (!extensions[i].is_supported)
> continue;
>
> +#ifdef __APPLE__
> + if (!strcmp(extensions[i].name, VK_MVK_MACOS_SURFACE_EXTENSION_NAME))
> + {
> + pfn = vkGetInstanceProcAddr(vk_instance, "vkCreateMacOSSurfaceMVK");
> + ok(pfn, "Failed to get proc addr for vkCreateMacOSSurfaceMVK.\n");
> + }
> +#else
> if (!strcmp(extensions[i].name, VK_KHR_XCB_SURFACE_EXTENSION_NAME))
> {
> pfn = vkGetInstanceProcAddr(vk_instance, "vkCreateXcbSurfaceKHR");
> @@ -259,6 +274,7 @@ static void test_additional_instance_extensions(void)
> pfn = vkGetInstanceProcAddr(vk_instance, "vkCreateXlibSurfaceKHR");
> ok(pfn, "Failed to get proc addr for vkCreateXlibSurfaceKHR.\n");
> }
> +#endif
More "#ifdef __APPLE__" that should be checking for MoltenVK instead.
More information about the wine-devel
mailing list