MacOS WSI test support
authorMike Schuchardt <mikes@lunarg.com>
Tue, 1 May 2018 22:45:44 +0000 (16:45 -0600)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Wed, 30 May 2018 09:49:02 +0000 (05:49 -0400)
Adds TYPE_MACOS to WSI framework to enable dEQP-VK.wsi.macos.* tests.
Adds WSI integration to tcu::osx::VulkanPlatform using an Objective-C++
wrapper around a native NSView subclass backed by a CAMetalLayer.

Affects:

dEQP-VK.wsi.macos.*

Components: Framework, Vulkan

Change-Id: I53b487ec6040e88b125d168be7e8c3408f44d959

android/cts/master/vk-master.txt
external/vulkancts/framework/vulkan/vkDefs.hpp
external/vulkancts/framework/vulkan/vkWsiPlatform.hpp
external/vulkancts/framework/vulkan/vkWsiUtil.cpp
external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.2/vk-default.txt
framework/platform/CMakeLists.txt
framework/platform/osx/tcuOSXMetalView.hpp [new file with mode: 0644]
framework/platform/osx/tcuOSXMetalView.mm [new file with mode: 0644]
framework/platform/osx/tcuOSXVulkanPlatform.cpp
targets/default/default.cmake

index 655f10a..fcb2a93 100755 (executable)
@@ -266482,6 +266482,64 @@ dEQP-VK.wsi.android.shared_presentable_image.scale_down.continuous
 dEQP-VK.wsi.android.colorspace.extensions
 dEQP-VK.wsi.android.colorspace.basic
 dEQP-VK.wsi.android.colorspace.hdr
+dEQP-VK.wsi.macos.surface.create
+dEQP-VK.wsi.macos.surface.create_custom_allocator
+dEQP-VK.wsi.macos.surface.create_simulate_oom
+dEQP-VK.wsi.macos.surface.query_support
+dEQP-VK.wsi.macos.surface.query_capabilities
+dEQP-VK.wsi.macos.surface.query_capabilities2
+dEQP-VK.wsi.macos.surface.query_formats
+dEQP-VK.wsi.macos.surface.query_formats2
+dEQP-VK.wsi.macos.surface.query_present_modes
+dEQP-VK.wsi.macos.surface.query_devgroup_present_capabilities
+dEQP-VK.wsi.macos.surface.query_devgroup_present_modes
+dEQP-VK.wsi.macos.surface.destroy_null_handle
+dEQP-VK.wsi.macos.surface.initial_size
+dEQP-VK.wsi.macos.surface.resize
+dEQP-VK.wsi.macos.swapchain.create.min_image_count
+dEQP-VK.wsi.macos.swapchain.create.image_format
+dEQP-VK.wsi.macos.swapchain.create.image_extent
+dEQP-VK.wsi.macos.swapchain.create.image_array_layers
+dEQP-VK.wsi.macos.swapchain.create.image_usage
+dEQP-VK.wsi.macos.swapchain.create.image_sharing_mode
+dEQP-VK.wsi.macos.swapchain.create.pre_transform
+dEQP-VK.wsi.macos.swapchain.create.composite_alpha
+dEQP-VK.wsi.macos.swapchain.create.present_mode
+dEQP-VK.wsi.macos.swapchain.create.clipped
+dEQP-VK.wsi.macos.swapchain.simulate_oom.min_image_count
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_format
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_extent
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_array_layers
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_usage
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_sharing_mode
+dEQP-VK.wsi.macos.swapchain.simulate_oom.pre_transform
+dEQP-VK.wsi.macos.swapchain.simulate_oom.composite_alpha
+dEQP-VK.wsi.macos.swapchain.simulate_oom.present_mode
+dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.macos.swapchain.render.basic
+dEQP-VK.wsi.macos.swapchain.destroy.null_handle
+dEQP-VK.wsi.macos.swapchain.get_images.incomplete
+dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo_relaxed.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo_relaxed.incremental_present
+dEQP-VK.wsi.macos.display_timing.fifo.reference
+dEQP-VK.wsi.macos.display_timing.fifo.display_timing
+dEQP-VK.wsi.macos.display_timing.fifo_relaxed.reference
+dEQP-VK.wsi.macos.display_timing.fifo_relaxed.display_timing
+dEQP-VK.wsi.macos.display_timing.immediate.reference
+dEQP-VK.wsi.macos.display_timing.immediate.display_timing
+dEQP-VK.wsi.macos.display_timing.mailbox.reference
+dEQP-VK.wsi.macos.display_timing.mailbox.display_timing
+dEQP-VK.wsi.macos.shared_presentable_image.scale_none.demand
+dEQP-VK.wsi.macos.shared_presentable_image.scale_none.continuous
+dEQP-VK.wsi.macos.colorspace.extensions
+dEQP-VK.wsi.macos.colorspace.basic
+dEQP-VK.wsi.macos.colorspace.hdr
 dEQP-VK.wsi.display.get_display_properties
 dEQP-VK.wsi.display.get_display_plane_properties
 dEQP-VK.wsi.display.get_display_plane_supported_displays
@@ -326243,6 +326301,17 @@ dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.composite_alpha
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.present_mode
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.clipped
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.render.basic
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.min_image_count
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_format
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_extent
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_array_layers
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_usage
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_sharing_mode
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.pre_transform
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.composite_alpha
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.present_mode
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.clipped
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.render.basic
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_cosited
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_midpoint
index dcdb5f8..23dd242 100644 (file)
@@ -128,6 +128,7 @@ enum Type
        TYPE_MIR,
        TYPE_ANDROID,
        TYPE_WIN32,
+       TYPE_MACOS,
 
        TYPE_LAST
 };
index be9d528..6232447 100644 (file)
@@ -173,6 +173,16 @@ struct TypeTraits<TYPE_WIN32>
 typedef DisplayInterface<TYPE_WIN32>   Win32DisplayInterface;
 typedef WindowInterface<TYPE_WIN32>            Win32WindowInterface;
 
+// VK_MVK_macos_surface
+
+template<>
+struct TypeTraits<TYPE_MACOS>
+{
+       typedef void*                                           NativeWindowType;
+};
+
+typedef WindowInterface<TYPE_MACOS>            MacOSWindowInterface;
+
 } // wsi
 } // vk
 
index 00673dd..b7428c9 100644 (file)
@@ -43,6 +43,7 @@ const char* getName (Type wsiType)
                "mir",
                "android",
                "win32",
+               "macos",
        };
        return de::getSizedArrayElement<TYPE_LAST>(s_names, wsiType);
 }
@@ -57,6 +58,7 @@ const char* getExtensionName (Type wsiType)
                "VK_KHR_mir_surface",
                "VK_KHR_android_surface",
                "VK_KHR_win32_surface",
+               "VK_MVK_macos_surface"
        };
        return de::getSizedArrayElement<TYPE_LAST>(s_extNames, wsiType);
 }
@@ -115,6 +117,13 @@ const PlatformProperties& getPlatformProperties (Type wsiType)
                        noDisplayLimit,
                        noWindowLimit,
                },
+               // VK_MVK_macos_surface
+               {
+                       PlatformProperties::FEATURE_INITIAL_WINDOW_SIZE|PlatformProperties::FEATURE_RESIZE_WINDOW,
+                       PlatformProperties::SWAPCHAIN_EXTENT_MUST_MATCH_WINDOW_SIZE,
+                       noDisplayLimit,
+                       noWindowLimit,
+               },
        };
 
        return de::getSizedArrayElement<TYPE_LAST>(s_properties, wsiType);
@@ -129,7 +138,7 @@ VkResult createSurface (const InstanceInterface&            vki,
                                                VkSurfaceKHR*                                   pSurface)
 {
        // Update this function if you add more WSI implementations
-       DE_STATIC_ASSERT(TYPE_LAST == 6);
+       DE_STATIC_ASSERT(TYPE_LAST == 7);
 
        switch (wsiType)
        {
@@ -227,6 +236,20 @@ VkResult createSurface (const InstanceInterface&           vki,
                        return vki.createWin32SurfaceKHR(instance, &createInfo, pAllocator, pSurface);
                }
 
+               case TYPE_MACOS:
+               {
+                       const MacOSWindowInterface&                     macOSWindow             = dynamic_cast<const MacOSWindowInterface&>(nativeWindow);
+                       const VkMacOSSurfaceCreateInfoMVK       createInfo              =
+                       {
+                               VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK,
+                               DE_NULL,
+                               (VkMacOSSurfaceCreateFlagsMVK)0,
+                               macOSWindow.getNative()
+                       };
+
+                       return vki.createMacOSSurfaceMVK(instance, &createInfo, pAllocator, pSurface);
+               }
+
                default:
                        DE_FATAL("Unknown WSI type");
                        return VK_ERROR_SURFACE_LOST_KHR;
index b49ada7..eca8ccf 100644 (file)
@@ -266810,6 +266810,64 @@ dEQP-VK.wsi.win32.shared_presentable_image.scale_none.continuous
 dEQP-VK.wsi.win32.colorspace.extensions
 dEQP-VK.wsi.win32.colorspace.basic
 dEQP-VK.wsi.win32.colorspace.hdr
+dEQP-VK.wsi.macos.surface.create
+dEQP-VK.wsi.macos.surface.create_custom_allocator
+dEQP-VK.wsi.macos.surface.create_simulate_oom
+dEQP-VK.wsi.macos.surface.query_support
+dEQP-VK.wsi.macos.surface.query_capabilities
+dEQP-VK.wsi.macos.surface.query_capabilities2
+dEQP-VK.wsi.macos.surface.query_formats
+dEQP-VK.wsi.macos.surface.query_formats2
+dEQP-VK.wsi.macos.surface.query_present_modes
+dEQP-VK.wsi.macos.surface.query_devgroup_present_capabilities
+dEQP-VK.wsi.macos.surface.query_devgroup_present_modes
+dEQP-VK.wsi.macos.surface.destroy_null_handle
+dEQP-VK.wsi.macos.surface.initial_size
+dEQP-VK.wsi.macos.surface.resize
+dEQP-VK.wsi.macos.swapchain.create.min_image_count
+dEQP-VK.wsi.macos.swapchain.create.image_format
+dEQP-VK.wsi.macos.swapchain.create.image_extent
+dEQP-VK.wsi.macos.swapchain.create.image_array_layers
+dEQP-VK.wsi.macos.swapchain.create.image_usage
+dEQP-VK.wsi.macos.swapchain.create.image_sharing_mode
+dEQP-VK.wsi.macos.swapchain.create.pre_transform
+dEQP-VK.wsi.macos.swapchain.create.composite_alpha
+dEQP-VK.wsi.macos.swapchain.create.present_mode
+dEQP-VK.wsi.macos.swapchain.create.clipped
+dEQP-VK.wsi.macos.swapchain.simulate_oom.min_image_count
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_format
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_extent
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_array_layers
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_usage
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_sharing_mode
+dEQP-VK.wsi.macos.swapchain.simulate_oom.pre_transform
+dEQP-VK.wsi.macos.swapchain.simulate_oom.composite_alpha
+dEQP-VK.wsi.macos.swapchain.simulate_oom.present_mode
+dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.macos.swapchain.render.basic
+dEQP-VK.wsi.macos.swapchain.destroy.null_handle
+dEQP-VK.wsi.macos.swapchain.get_images.incomplete
+dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo_relaxed.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo_relaxed.incremental_present
+dEQP-VK.wsi.macos.display_timing.fifo.reference
+dEQP-VK.wsi.macos.display_timing.fifo.display_timing
+dEQP-VK.wsi.macos.display_timing.fifo_relaxed.reference
+dEQP-VK.wsi.macos.display_timing.fifo_relaxed.display_timing
+dEQP-VK.wsi.macos.display_timing.immediate.reference
+dEQP-VK.wsi.macos.display_timing.immediate.display_timing
+dEQP-VK.wsi.macos.display_timing.mailbox.reference
+dEQP-VK.wsi.macos.display_timing.mailbox.display_timing
+dEQP-VK.wsi.macos.shared_presentable_image.scale_none.demand
+dEQP-VK.wsi.macos.shared_presentable_image.scale_none.continuous
+dEQP-VK.wsi.macos.colorspace.extensions
+dEQP-VK.wsi.macos.colorspace.basic
+dEQP-VK.wsi.macos.colorspace.hdr
 dEQP-VK.wsi.display.get_display_properties
 dEQP-VK.wsi.display.get_display_plane_properties
 dEQP-VK.wsi.display.get_display_plane_supported_displays
@@ -326571,6 +326629,17 @@ dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.composite_alpha
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.present_mode
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.clipped
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.render.basic
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.min_image_count
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_format
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_extent
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_array_layers
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_usage
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_sharing_mode
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.pre_transform
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.composite_alpha
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.present_mode
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.clipped
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.render.basic
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_cosited
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_midpoint
index 31dd9d8..f6ccce8 100644 (file)
@@ -266771,6 +266771,64 @@ dEQP-VK.wsi.win32.shared_presentable_image.scale_none.continuous
 dEQP-VK.wsi.win32.colorspace.extensions
 dEQP-VK.wsi.win32.colorspace.basic
 dEQP-VK.wsi.win32.colorspace.hdr
+dEQP-VK.wsi.macos.surface.create
+dEQP-VK.wsi.macos.surface.create_custom_allocator
+dEQP-VK.wsi.macos.surface.create_simulate_oom
+dEQP-VK.wsi.macos.surface.query_support
+dEQP-VK.wsi.macos.surface.query_capabilities
+dEQP-VK.wsi.macos.surface.query_capabilities2
+dEQP-VK.wsi.macos.surface.query_formats
+dEQP-VK.wsi.macos.surface.query_formats2
+dEQP-VK.wsi.macos.surface.query_present_modes
+dEQP-VK.wsi.macos.surface.query_devgroup_present_capabilities
+dEQP-VK.wsi.macos.surface.query_devgroup_present_modes
+dEQP-VK.wsi.macos.surface.destroy_null_handle
+dEQP-VK.wsi.macos.surface.initial_size
+dEQP-VK.wsi.macos.surface.resize
+dEQP-VK.wsi.macos.swapchain.create.min_image_count
+dEQP-VK.wsi.macos.swapchain.create.image_format
+dEQP-VK.wsi.macos.swapchain.create.image_extent
+dEQP-VK.wsi.macos.swapchain.create.image_array_layers
+dEQP-VK.wsi.macos.swapchain.create.image_usage
+dEQP-VK.wsi.macos.swapchain.create.image_sharing_mode
+dEQP-VK.wsi.macos.swapchain.create.pre_transform
+dEQP-VK.wsi.macos.swapchain.create.composite_alpha
+dEQP-VK.wsi.macos.swapchain.create.present_mode
+dEQP-VK.wsi.macos.swapchain.create.clipped
+dEQP-VK.wsi.macos.swapchain.simulate_oom.min_image_count
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_format
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_extent
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_array_layers
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_usage
+dEQP-VK.wsi.macos.swapchain.simulate_oom.image_sharing_mode
+dEQP-VK.wsi.macos.swapchain.simulate_oom.pre_transform
+dEQP-VK.wsi.macos.swapchain.simulate_oom.composite_alpha
+dEQP-VK.wsi.macos.swapchain.simulate_oom.present_mode
+dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.macos.swapchain.render.basic
+dEQP-VK.wsi.macos.swapchain.destroy.null_handle
+dEQP-VK.wsi.macos.swapchain.get_images.incomplete
+dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo.incremental_present
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo_relaxed.reference
+dEQP-VK.wsi.macos.incremental_present.scale_none.fifo_relaxed.incremental_present
+dEQP-VK.wsi.macos.display_timing.fifo.reference
+dEQP-VK.wsi.macos.display_timing.fifo.display_timing
+dEQP-VK.wsi.macos.display_timing.fifo_relaxed.reference
+dEQP-VK.wsi.macos.display_timing.fifo_relaxed.display_timing
+dEQP-VK.wsi.macos.display_timing.immediate.reference
+dEQP-VK.wsi.macos.display_timing.immediate.display_timing
+dEQP-VK.wsi.macos.display_timing.mailbox.reference
+dEQP-VK.wsi.macos.display_timing.mailbox.display_timing
+dEQP-VK.wsi.macos.shared_presentable_image.scale_none.demand
+dEQP-VK.wsi.macos.shared_presentable_image.scale_none.continuous
+dEQP-VK.wsi.macos.colorspace.extensions
+dEQP-VK.wsi.macos.colorspace.basic
+dEQP-VK.wsi.macos.colorspace.hdr
 dEQP-VK.wsi.display.get_display_properties
 dEQP-VK.wsi.display.get_display_plane_properties
 dEQP-VK.wsi.display.get_display_plane_supported_displays
@@ -326532,6 +326590,17 @@ dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.composite_alpha
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.present_mode
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.create.clipped
 dEQP-VK.protected_memory.interaction.wsi.win32.swapchain.render.basic
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.min_image_count
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_format
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_extent
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_array_layers
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_usage
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.image_sharing_mode
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.pre_transform
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.composite_alpha
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.present_mode
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.create.clipped
+dEQP-VK.protected_memory.interaction.wsi.macos.swapchain.render.basic
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_cosited
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
 dEQP-VK.protected_memory.interaction.ycbcr.r4g4b4a4_unorm_pack16.fragment.rgb_identity.itu_full.tiling_optimal_midpoint
index 69e2f03..f7858f5 100644 (file)
@@ -132,6 +132,8 @@ if (NOT DEFINED TCUTIL_PLATFORM_SRCS)
                        osx/tcuOSXPlatform.hpp
                        osx/tcuOSXVulkanPlatform.cpp
                        osx/tcuOSXVulkanPlatform.hpp
+                       osx/tcuOSXMetalView.mm
+                       osx/tcuOSXMetalView.hpp
                        )
 
        else ()
diff --git a/framework/platform/osx/tcuOSXMetalView.hpp b/framework/platform/osx/tcuOSXMetalView.hpp
new file mode 100644 (file)
index 0000000..336380b
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef _TCUOSXMETALVIEW_HPP
+#define _TCUOSXMETALVIEW_HPP
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program Tester Core
+ * ----------------------------------------
+ *
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief VK_MVK_macos_surface compatible view
+ *//*--------------------------------------------------------------------*/
+
+namespace tcu
+{
+namespace osx
+{
+
+class MetalView
+{
+public:
+                               MetalView                       (int width, int height);
+                               ~MetalView                      (void);
+
+       void            setSize                         (int width, int height);
+
+       void*           getView                         (void) const { return m_view;   }
+
+private:
+                               MetalView                       (const MetalView&);
+       MetalView       operator=                       (const MetalView&);
+
+       void*           m_view;
+};
+
+} // osx
+} // tcu
+
+#endif // _TCUOSXMETALVIEW_HPP
diff --git a/framework/platform/osx/tcuOSXMetalView.mm b/framework/platform/osx/tcuOSXMetalView.mm
new file mode 100644 (file)
index 0000000..d15c244
--- /dev/null
@@ -0,0 +1,66 @@
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program Tester Core
+ * ----------------------------------------
+ *
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief VK_MVK_macos_surface compatible view
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuOSXMetalView.hpp"
+
+#import <AppKit/AppKit.h>
+#import <QuartzCore/QuartzCore.h>
+
+@interface NativeMetalView : NSView
+@end
+
+@implementation NativeMetalView
+- (id)initWithFrame:(NSRect) frame {
+       if(self = [super initWithFrame: frame]) {
+               // Make this a layer-backed view
+               self.wantsLayer = YES;
+       }
+       return self;
+}
+
+// Callback to create the backing metal layer
+- (CALayer*)makeBackingLayer {
+       return [CAMetalLayer layer];
+}
+@end
+
+namespace tcu
+{
+namespace osx
+{
+       MetalView::MetalView (int width, int height)
+       : m_view([[NativeMetalView alloc] initWithFrame:NSMakeRect(0, 0, width, height)])
+       {
+       }
+
+       void MetalView::setSize(int width, int height)
+       {
+               [(NativeMetalView*)m_view setFrame:NSMakeRect(0, 0, width, height)];
+       }
+
+       MetalView::~MetalView ()
+       {
+               [(NativeMetalView*)m_view dealloc];
+       }
+} // osx
+} // tcu
index 41b8d56..b1fde87 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "tcuOSXVulkanPlatform.hpp"
 #include "tcuOSXPlatform.hpp"
+#include "tcuOSXMetalView.hpp"
 #include "vkWsiPlatform.hpp"
 #include "gluPlatform.hpp"
 #include "tcuFunctionLibrary.hpp"
@@ -39,6 +40,38 @@ namespace tcu
 namespace osx
 {
 
+class VulkanWindow : public vk::wsi::MacOSWindowInterface
+{
+public:
+       VulkanWindow (MovePtr<osx::MetalView> view)
+       : vk::wsi::MacOSWindowInterface(view->getView())
+       , m_view(view)
+       {
+       }
+
+       void resize (const UVec2& newSize) {
+               m_view->setSize(newSize.x(), newSize.y());
+       }
+
+private:
+       UniquePtr<osx::MetalView> m_view;
+};
+
+class VulkanDisplay : public vk::wsi::Display
+{
+public:
+       VulkanDisplay ()
+       {
+       }
+
+       vk::wsi::Window* createWindow (const Maybe<UVec2>& initialSize) const
+       {
+               const deUint32 width = !initialSize ? 400 : initialSize->x();
+               const deUint32 height = !initialSize ? 300 : initialSize->y();
+               return new VulkanWindow(MovePtr<osx::MetalView>(new osx::MetalView(width, height)));
+       }
+};
+
 class VulkanLibrary : public vk::Library
 {
 public:
@@ -69,13 +102,10 @@ VulkanPlatform::VulkanPlatform ()
 
 vk::wsi::Display* VulkanPlatform::createWsiDisplay (vk::wsi::Type wsiType) const
 {
-       switch(wsiType)
-       {
-       //TODO: Core Graphics WSI
-       default:
+       if (wsiType != vk::wsi::TYPE_MACOS)
                TCU_THROW(NotSupportedError, "WSI type not supported");
 
-       };
+       return new VulkanDisplay();
 }
 
 vk::Library* VulkanPlatform::createLibrary (void) const
index 588bbde..3685cf6 100644 (file)
@@ -83,6 +83,8 @@ endif ()
 # MacOS?
 if (DE_OS_IS_OSX)
        find_package(OpenGL REQUIRED)
-       set(DEQP_PLATFORM_LIBRARIES ${OPENGL_LIBRARIES})
+       find_library(COCOA_LIBRARY Cocoa)
+       find_library(QUARTZCORE_LIBRARY QuartzCore)
+       set(DEQP_PLATFORM_LIBRARIES ${OPENGL_LIBRARIES} ${COCOA_LIBRARY} ${QUARTZCORE_LIBRARY})
        include_directories(${OPENGL_INCLUDE_DIRS})
 endif()