From aed62466ff5bb38ae39010888bc4859afbe1cf94 Mon Sep 17 00:00:00 2001 From: Mike Schuchardt Date: Fri, 26 Jul 2019 07:56:30 -0700 Subject: [PATCH] cube: Workaround macOS cube issue Latest version of MoltenVK behaves in an apparently non-conformant way by not allowing some linear images to be mapped to memory with VK_MEMORY_PROPERTY_HOST_COHERENT_BIT. This change sidesteps the issue by forcing the use of staging buffer for loading textures. --- cube/cube.c | 6 ++++++ cube/cube.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/cube/cube.c b/cube/cube.c index 18344e4..41d980c 100644 --- a/cube/cube.c +++ b/cube/cube.c @@ -3688,6 +3688,12 @@ static void demo_init(struct demo *demo, int argc, char **argv) { memset(demo, 0, sizeof(*demo)); demo->presentMode = VK_PRESENT_MODE_FIFO_KHR; demo->frameCount = INT32_MAX; + +#if defined(VK_USE_PLATFORM_MACOS_MVK) + // MoltenVK may not allow host coherent mapping to linear tiled images + // Force the use of a staging buffer to be safe + demo->use_staging_buffer = true; +#endif for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "--use_staging") == 0) { diff --git a/cube/cube.cpp b/cube/cube.cpp index 04447fc..a6f600c 100644 --- a/cube/cube.cpp +++ b/cube/cube.cpp @@ -899,6 +899,12 @@ void Demo::init(int argc, char **argv) { presentMode = vk::PresentModeKHR::eFifo; frameCount = UINT32_MAX; use_xlib = false; + +#if defined(VK_USE_PLATFORM_MACOS_MVK) + // MoltenVK may not allow host coherent mapping to linear tiled images + // Force the use of a staging buffer to be safe + use_staging_buffer = true; +#endif for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "--use_staging") == 0) { -- 2.7.4