On Dec 13, 2019, at 10:57 AM, Chip Davis cdavis@codeweavers.com wrote:
It isn't safe to access the view object from any thread other than the main thread. In fact, if you try to call vkCreateMacOSSurfaceMVK() from any other thread, MoltenVK prints out a big, scary warning telling you not to do this! Instead, get the layer from the view ourselves and pass that to MoltenVK. Recent versions of MoltenVK can accept either the view or the layer.
Signed-off-by: Chip Davis cdavis@codeweavers.com
dlls/winemac.drv/cocoa_window.m | 14 ++++++++++++++ dlls/winemac.drv/macdrv_cocoa.h | 2 ++ dlls/winemac.drv/vulkan.c | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 877653ea007..6ac30843025 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -3796,6 +3796,20 @@ macdrv_metal_view macdrv_view_create_metal_view(macdrv_view v, macdrv_metal_devi return (macdrv_metal_view)metalView; }
+macdrv_metal_layer macdrv_view_get_metal_layer(macdrv_metal_view v) +{
- WineMetalView* view = (WineMetalView*)v;
- __block CAMetalLayer* layer;
- if ([NSThread isMainThread])
layer = (CAMetalLayer*)view.layer;
This will never be called from the main thread.
- else OnMainThread(^{
layer = (CAMetalLayer*)view.layer;
- });
- return (macdrv_metal_layer)layer;
+}
void macdrv_view_release_metal_view(macdrv_metal_view v) { WineMetalView* view = (WineMetalView*)v;