Fix view mask in multiview tests; Add maxMultiviewViewCount cases
authorIgor Ostrowski <igor.ostrowski@intel.com>
Tue, 11 Apr 2017 15:27:00 +0000 (17:27 +0200)
committerPyry Haulos <phaulos@google.com>
Tue, 25 Apr 2017 10:04:31 +0000 (03:04 -0700)
Test was using 10 views while min required view count is 6.
Also added tests for max_multi_view_view_count

Renamed dEQP-VK.multiview.*.1_2_4_8_16_32_64_128_256_512
to dEQP-VK.multiview.*.1_2_4_8_16_32

Affects:
dEQP-VK.multiview.*.1_2_4_8_16_32

New testcases:
dEQP-VK.multiview.*.max_multi_view_view_count

Components: Vulkan
VK-GL-CTS issue: 366

Change-Id: Ic97f0f3db52c79fb0c3bf3e14018c66fcfe2a071

android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
external/vulkancts/mustpass/1.0.3/vk-default.txt

index 1f69ad8..86f8724 100644 (file)
@@ -180394,28 +180394,33 @@ dEQP-VK.multiview.masks.8
 dEQP-VK.multiview.masks.1_2_4_8
 dEQP-VK.multiview.masks.15_15_15_15
 dEQP-VK.multiview.masks.8_1_1_8
-dEQP-VK.multiview.masks.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.masks.1_2_4_8_16_32
+dEQP-VK.multiview.masks.max_multi_view_view_count
 dEQP-VK.multiview.index.vertex_shader.15
 dEQP-VK.multiview.index.vertex_shader.8
 dEQP-VK.multiview.index.vertex_shader.1_2_4_8
 dEQP-VK.multiview.index.vertex_shader.15_15_15_15
 dEQP-VK.multiview.index.vertex_shader.8_1_1_8
-dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.vertex_shader.max_multi_view_view_count
 dEQP-VK.multiview.index.fragment_shader.15
 dEQP-VK.multiview.index.fragment_shader.8
 dEQP-VK.multiview.index.fragment_shader.1_2_4_8
 dEQP-VK.multiview.index.fragment_shader.15_15_15_15
 dEQP-VK.multiview.index.fragment_shader.8_1_1_8
-dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.fragment_shader.max_multi_view_view_count
 dEQP-VK.multiview.index.geometry_shader.15
 dEQP-VK.multiview.index.geometry_shader.8
 dEQP-VK.multiview.index.geometry_shader.1_2_4_8
 dEQP-VK.multiview.index.geometry_shader.15_15_15_15
 dEQP-VK.multiview.index.geometry_shader.8_1_1_8
-dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count
 dEQP-VK.multiview.index.tesellation_shader.15
 dEQP-VK.multiview.index.tesellation_shader.8
 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8
 dEQP-VK.multiview.index.tesellation_shader.15_15_15_15
 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
index ef618f3..a96d837 100644 (file)
@@ -93,6 +93,7 @@ private:
        };
 
        tcu::TestStatus                                 iterate                                                 (void);
+       TestParameters                                  fillMissingParameters                   (const TestParameters&                                          parameters);
        void                                                    createMultiViewDevices                  (void);
        void                                                    madeShaderModule                                (map<VkShaderStageFlagBits,ShaderModuleSP>& shaderModule, vector<VkPipelineShaderStageCreateInfo>& shaderStageParams);
        Move<VkPipeline>                                makeGraphicsPipeline                    (const VkRenderPass                                                     renderPass,
@@ -103,7 +104,7 @@ private:
        void                                                    readImage                                               (VkImage image, const tcu::PixelBufferAccess& dst);
        bool                                                    checkImage                                              (tcu::ConstPixelBufferAccess& dst);
 
-       const TestParameters&                   m_parameters;
+       const TestParameters                    m_parameters;
        VkFormat                                                m_colorFormat;
        const deUint32                                  m_squareCount;
        Move<VkDevice>                                  m_logicalDevice;
@@ -118,7 +119,7 @@ private:
 
 MultiViewRenderTestInstance::MultiViewRenderTestInstance (Context& context, const TestParameters& parameters)
        : TestInstance          (context)
-       , m_parameters          (parameters)
+       , m_parameters          (fillMissingParameters(parameters))
        , m_colorFormat         (VK_FORMAT_R8G8B8A8_UNORM)
        , m_squareCount         (4u)
 {
@@ -282,6 +283,43 @@ tcu::TestStatus MultiViewRenderTestInstance::iterate (void)
        return tcu::TestStatus::pass("Pass");
 }
 
+TestParameters MultiViewRenderTestInstance::fillMissingParameters (const TestParameters& parameters)
+{
+       if (!parameters.viewMasks.empty())
+               return parameters;
+       else
+       {
+               const InstanceInterface&        instance                = m_context.getInstanceInterface();
+               const VkPhysicalDevice          physicalDevice  = m_context.getPhysicalDevice();
+
+               VkPhysicalDeviceMultiviewPropertiesKHX multiviewProperties =
+               {
+                       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX,     // VkStructureType      sType;
+                       DE_NULL,                                                                                                        // void*                        pNext;
+                       0u,                                                                                                                     // deUint32                     maxMultiviewViewCount;
+                       0u                                                                                                                      // deUint32                     maxMultiviewInstanceIndex;
+               };
+
+               VkPhysicalDeviceProperties2KHR deviceProperties2;
+               deviceProperties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
+               deviceProperties2.pNext = &multiviewProperties;
+
+               instance.getPhysicalDeviceProperties2KHR(physicalDevice, &deviceProperties2);
+
+               TestParameters newParameters = parameters;
+               newParameters.extent.depth = multiviewProperties.maxMultiviewViewCount;
+
+               const deUint32 maxViewMask = (1u << multiviewProperties.maxMultiviewViewCount) - 1u;
+
+               vector<deUint32> viewMasks;
+               for (deUint32 mask = 1u; mask <= maxViewMask; mask = mask << 1u)
+                       viewMasks.push_back(mask);
+               newParameters.viewMasks = viewMasks;
+
+               return newParameters;
+       }
+}
+
 void MultiViewRenderTestInstance::createMultiViewDevices (void)
 {
        const InstanceInterface&                                instance                                = m_context.getInstanceInterface();
@@ -932,7 +970,10 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group)
        viewMasks[4].push_back(1u);             //0001
        viewMasks[4].push_back(8u);             //1000
 
-       for(deUint32 mask = 1u; mask < 1024u; mask = mask << 1u)
+       const deUint32 minSupportedMultiviewViewCount   = 6u;
+       const deUint32 maxViewMask                                              = (1u << minSupportedMultiviewViewCount) - 1u;
+
+       for(deUint32 mask = 1u; mask <= maxViewMask; mask = mask << 1u)
                viewMasks[5].push_back(mask);
 
        for(int shaderTypeNdx = VIEW_INDEX_NOT_USE; shaderTypeNdx < VIEW_INDEX_LAST; ++shaderTypeNdx)
@@ -953,6 +994,15 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group)
                        groupShader->addChild(new MultiViewRenderTestsCase(testCtx, masks.str().c_str(), "", parameters));
                }
 
+               // maxMultiviewViewCount case
+               {
+                       const VkExtent3D                incompleteExtent3D      = { 16u, 16u, 0u };
+                       const vector<deUint32>  dummyMasks;
+                       const TestParameters    parameters                      = { incompleteExtent3D, dummyMasks, (ViewIndex)shaderTypeNdx };
+
+                       groupShader->addChild(new MultiViewRenderTestsCase(testCtx, "max_multi_view_view_count", "", parameters));
+               }
+
                if (VIEW_INDEX_NOT_USE == shaderTypeNdx)
                        group->addChild(groupShader.release());
                else
index e2c14c4..a035490 100644 (file)
@@ -202770,28 +202770,33 @@ dEQP-VK.multiview.masks.8
 dEQP-VK.multiview.masks.1_2_4_8
 dEQP-VK.multiview.masks.15_15_15_15
 dEQP-VK.multiview.masks.8_1_1_8
-dEQP-VK.multiview.masks.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.masks.1_2_4_8_16_32
+dEQP-VK.multiview.masks.max_multi_view_view_count
 dEQP-VK.multiview.index.vertex_shader.15
 dEQP-VK.multiview.index.vertex_shader.8
 dEQP-VK.multiview.index.vertex_shader.1_2_4_8
 dEQP-VK.multiview.index.vertex_shader.15_15_15_15
 dEQP-VK.multiview.index.vertex_shader.8_1_1_8
-dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.vertex_shader.max_multi_view_view_count
 dEQP-VK.multiview.index.fragment_shader.15
 dEQP-VK.multiview.index.fragment_shader.8
 dEQP-VK.multiview.index.fragment_shader.1_2_4_8
 dEQP-VK.multiview.index.fragment_shader.15_15_15_15
 dEQP-VK.multiview.index.fragment_shader.8_1_1_8
-dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.fragment_shader.max_multi_view_view_count
 dEQP-VK.multiview.index.geometry_shader.15
 dEQP-VK.multiview.index.geometry_shader.8
 dEQP-VK.multiview.index.geometry_shader.1_2_4_8
 dEQP-VK.multiview.index.geometry_shader.15_15_15_15
 dEQP-VK.multiview.index.geometry_shader.8_1_1_8
-dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count
 dEQP-VK.multiview.index.tesellation_shader.15
 dEQP-VK.multiview.index.tesellation_shader.8
 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8
 dEQP-VK.multiview.index.tesellation_shader.15_15_15_15
 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count