Tests for VK_KHR_create_renderpass2: multiview
authorBoris Zanin <boris.zanin@mobica.com>
Tue, 20 Mar 2018 14:54:56 +0000 (15:54 +0100)
committerBoris Zanin <boris.zanin@mobica.com>
Thu, 26 Apr 2018 10:36:49 +0000 (12:36 +0200)
Add tests:
 * dEQP-VK.multiview.renderpass2.*

Affects tests:
 *dEQP-VK.multiview.*

Components: Vulkan

VK-GL-CTS issue: 1011

Change-Id: I6cd54231dae7ff30249ffb2f6f0799b1359f7790

AndroidGen.mk
android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/multiview/CMakeLists.txt
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp
external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.2/vk-default.txt

index a7f2f62..24d93c7 100644 (file)
@@ -142,6 +142,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/memory/vktMemoryPipelineBarrierTests.cpp \
        external/vulkancts/modules/vulkan/memory/vktMemoryRequirementsTests.cpp \
        external/vulkancts/modules/vulkan/memory/vktMemoryTests.cpp \
+       external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.cpp \
        external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp \
        external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp \
        external/vulkancts/modules/vulkan/multiview/vktMultiViewTests.cpp \
index d5dcdd4..945c5a4 100755 (executable)
@@ -301235,6 +301235,168 @@ dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
 dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.masks.15
+dEQP-VK.multiview.renderpass2.masks.8
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8
+dEQP-VK.multiview.renderpass2.masks.15_15_15_15
+dEQP-VK.multiview.renderpass2.masks.8_1_1_8
+dEQP-VK.multiview.renderpass2.masks.5_10_5_10
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.masks.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments.15
+dEQP-VK.multiview.renderpass2.input_attachments.8
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.instanced.15
+dEQP-VK.multiview.renderpass2.instanced.8
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8
+dEQP-VK.multiview.renderpass2.instanced.15_15_15_15
+dEQP-VK.multiview.renderpass2.instanced.8_1_1_8
+dEQP-VK.multiview.renderpass2.instanced.5_10_5_10
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.instanced.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_instance.15
+dEQP-VK.multiview.renderpass2.input_instance.8
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_instance.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_instance.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_instance.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_instance.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect.15
+dEQP-VK.multiview.renderpass2.draw_indirect.8
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.clear_attachments.15
+dEQP-VK.multiview.renderpass2.clear_attachments.8
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.clear_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.clear_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.clear_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.clear_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.point_size.15
+dEQP-VK.multiview.renderpass2.point_size.8
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8
+dEQP-VK.multiview.renderpass2.point_size.15_15_15_15
+dEQP-VK.multiview.renderpass2.point_size.8_1_1_8
+dEQP-VK.multiview.renderpass2.point_size.5_10_5_10
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.point_size.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.multisample.15
+dEQP-VK.multiview.renderpass2.multisample.8
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8
+dEQP-VK.multiview.renderpass2.multisample.15_15_15_15
+dEQP-VK.multiview.renderpass2.multisample.8_1_1_8
+dEQP-VK.multiview.renderpass2.multisample.5_10_5_10
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.multisample.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.queries.15
+dEQP-VK.multiview.renderpass2.queries.8
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8
+dEQP-VK.multiview.renderpass2.queries.15_15_15_15
+dEQP-VK.multiview.renderpass2.queries.8_1_1_8
+dEQP-VK.multiview.renderpass2.queries.5_10_5_10
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.queries.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.depth.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.stencil.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.vertex_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
 dEQP-VK.subgroups.builtin_var.subgroupsize_graphic
 dEQP-VK.subgroups.builtin_var.subgroupsize_compute
 dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer
index 95344dc..902d08c 100644 (file)
@@ -3,6 +3,8 @@ include_directories(..)
 set(DEQP_VK_MULTI_VIEW_SRCS
        vktMultiViewTests.hpp
        vktMultiViewTests.cpp
+       vktMultiViewRenderPassUtil.hpp
+       vktMultiViewRenderPassUtil.cpp
        vktMultiViewRenderTests.hpp
        vktMultiViewRenderTests.cpp
        vktMultiViewRenderUtil.hpp
diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.cpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.cpp
new file mode 100644 (file)
index 0000000..a31d9cf
--- /dev/null
@@ -0,0 +1,370 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 The Khronos Group Inc.
+ *
+ * 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 RenderPass utils
+ *//*--------------------------------------------------------------------*/
+
+#include "vktMultiViewRenderPassUtil.hpp"
+#include "tcuTestCase.hpp"
+#include "vkRefUtil.hpp"
+
+using namespace vk;
+
+namespace vkt
+{
+namespace MultiView
+{
+
+AttachmentDescription1::AttachmentDescription1 (const void*                                            pNext_,
+                                                                                               VkAttachmentDescriptionFlags    flags_,
+                                                                                               VkFormat                                                format_,
+                                                                                               VkSampleCountFlagBits                   samples_,
+                                                                                               VkAttachmentLoadOp                              loadOp_,
+                                                                                               VkAttachmentStoreOp                             storeOp_,
+                                                                                               VkAttachmentLoadOp                              stencilLoadOp_,
+                                                                                               VkAttachmentStoreOp                             stencilStoreOp_,
+                                                                                               VkImageLayout                                   initialLayout_,
+                                                                                               VkImageLayout                                   finalLayout_)
+{
+       DE_ASSERT(pNext_ == DE_NULL);
+
+       // No sType field in this struct
+       DE_UNREF(pNext_);
+       flags                   = flags_;
+       format                  = format_;
+       samples                 = samples_;
+       loadOp                  = loadOp_;
+       storeOp                 = storeOp_;
+       stencilLoadOp   = stencilLoadOp_;
+       stencilStoreOp  = stencilStoreOp_;
+       initialLayout   = initialLayout_;
+       finalLayout             = finalLayout_;
+}
+
+AttachmentDescription2::AttachmentDescription2 (const void*                                            pNext_,
+                                                                                               VkAttachmentDescriptionFlags    flags_,
+                                                                                               VkFormat                                                format_,
+                                                                                               VkSampleCountFlagBits                   samples_,
+                                                                                               VkAttachmentLoadOp                              loadOp_,
+                                                                                               VkAttachmentStoreOp                             storeOp_,
+                                                                                               VkAttachmentLoadOp                              stencilLoadOp_,
+                                                                                               VkAttachmentStoreOp                             stencilStoreOp_,
+                                                                                               VkImageLayout                                   initialLayout_,
+                                                                                               VkImageLayout                                   finalLayout_)
+{
+       sType                   = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR;
+       pNext                   = pNext_;
+       flags                   = flags_;
+       format                  = format_;
+       samples                 = samples_;
+       loadOp                  = loadOp_;
+       storeOp                 = storeOp_;
+       stencilLoadOp   = stencilLoadOp_;
+       stencilStoreOp  = stencilStoreOp_;
+       initialLayout   = initialLayout_;
+       finalLayout             = finalLayout_;
+}
+
+AttachmentReference1::AttachmentReference1 (const void*                        pNext_,
+                                                                                       deUint32                        attachment_,
+                                                                                       VkImageLayout           layout_,
+                                                                                       VkImageAspectFlags      aspectMask_)
+{
+       DE_ASSERT(pNext_ == DE_NULL);
+       DE_ASSERT(aspectMask_ == 0);
+
+       // No sType field in this struct
+       DE_UNREF        (pNext_);
+       attachment      = attachment_;
+       layout          = layout_;
+       DE_UNREF        (aspectMask_);
+}
+
+AttachmentReference2::AttachmentReference2 (const void*                        pNext_,
+                                                                                       deUint32                        attachment_,
+                                                                                       VkImageLayout           layout_,
+                                                                                       VkImageAspectFlags      aspectMask_)
+{
+       sType           = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR;
+       pNext           = pNext_;
+       attachment      = attachment_;
+       layout          = layout_;
+       aspectMask      = aspectMask_;
+}
+
+SubpassDescription1::SubpassDescription1 (const void*                                          pNext_,
+                                                                                 VkSubpassDescriptionFlags                     flags_,
+                                                                                 VkPipelineBindPoint                           pipelineBindPoint_,
+                                                                                 deUint32                                                      viewMask_,
+                                                                                 deUint32                                                      inputAttachmentCount_,
+                                                                                 const VkAttachmentReference*          pInputAttachments_,
+                                                                                 deUint32                                                      colorAttachmentCount_,
+                                                                                 const VkAttachmentReference*          pColorAttachments_,
+                                                                                 const VkAttachmentReference*          pResolveAttachments_,
+                                                                                 const VkAttachmentReference*          pDepthStencilAttachment_,
+                                                                                 deUint32                                                      preserveAttachmentCount_,
+                                                                                 const deUint32*                                       pPreserveAttachments_)
+{
+       DE_ASSERT(pNext_ == DE_NULL);
+       DE_ASSERT(viewMask_ == 0);
+
+       // No sType field in this struct
+       DE_UNREF                                (pNext_);
+       flags                                   = flags_;
+       pipelineBindPoint               = pipelineBindPoint_;
+       DE_UNREF                                (viewMask_);
+       inputAttachmentCount    = inputAttachmentCount_;
+       pInputAttachments               = pInputAttachments_;
+       colorAttachmentCount    = colorAttachmentCount_;
+       pColorAttachments               = pColorAttachments_;
+       pResolveAttachments             = pResolveAttachments_;
+       pDepthStencilAttachment = pDepthStencilAttachment_;
+       preserveAttachmentCount = preserveAttachmentCount_;
+       pPreserveAttachments    = pPreserveAttachments_;
+}
+
+SubpassDescription2::SubpassDescription2 (const void*                                          pNext_,
+                                                                                 VkSubpassDescriptionFlags                     flags_,
+                                                                                 VkPipelineBindPoint                           pipelineBindPoint_,
+                                                                                 deUint32                                                      viewMask_,
+                                                                                 deUint32                                                      inputAttachmentCount_,
+                                                                                 const VkAttachmentReference2KHR*      pInputAttachments_,
+                                                                                 deUint32                                                      colorAttachmentCount_,
+                                                                                 const VkAttachmentReference2KHR*      pColorAttachments_,
+                                                                                 const VkAttachmentReference2KHR*      pResolveAttachments_,
+                                                                                 const VkAttachmentReference2KHR*      pDepthStencilAttachment_,
+                                                                                 deUint32                                                      preserveAttachmentCount_,
+                                                                                 const deUint32*                                       pPreserveAttachments_)
+{
+       sType                                   = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR;
+       pNext                                   = pNext_;
+       flags                                   = flags_;
+       pipelineBindPoint               = pipelineBindPoint_;
+       viewMask                                = viewMask_;
+       inputAttachmentCount    = inputAttachmentCount_;
+       pInputAttachments               = pInputAttachments_;
+       colorAttachmentCount    = colorAttachmentCount_;
+       pColorAttachments               = pColorAttachments_;
+       pResolveAttachments             = pResolveAttachments_;
+       pDepthStencilAttachment = pDepthStencilAttachment_;
+       preserveAttachmentCount = preserveAttachmentCount_;
+       pPreserveAttachments    = pPreserveAttachments_;
+}
+
+SubpassDependency1::SubpassDependency1 (const void*                            pNext_,
+                                                                               deUint32                                srcSubpass_,
+                                                                               deUint32                                dstSubpass_,
+                                                                               VkPipelineStageFlags    srcStageMask_,
+                                                                               VkPipelineStageFlags    dstStageMask_,
+                                                                               VkAccessFlags                   srcAccessMask_,
+                                                                               VkAccessFlags                   dstAccessMask_,
+                                                                               VkDependencyFlags               dependencyFlags_,
+                                                                               deInt32                                 viewOffset_)
+{
+       DE_ASSERT(pNext_ == DE_NULL);
+       DE_ASSERT(viewOffset_ == 0);
+
+       // No sType field in this struct
+       DE_UNREF                (pNext_);
+       srcSubpass              = srcSubpass_;
+       dstSubpass              = dstSubpass_;
+       srcStageMask    = srcStageMask_;
+       dstStageMask    = dstStageMask_;
+       srcAccessMask   = srcAccessMask_;
+       dstAccessMask   = dstAccessMask_;
+       dependencyFlags = dependencyFlags_;
+       DE_UNREF                (viewOffset_);
+}
+
+SubpassDependency2::SubpassDependency2 (const void*                            pNext_,
+                                                                               deUint32                                srcSubpass_,
+                                                                               deUint32                                dstSubpass_,
+                                                                               VkPipelineStageFlags    srcStageMask_,
+                                                                               VkPipelineStageFlags    dstStageMask_,
+                                                                               VkAccessFlags                   srcAccessMask_,
+                                                                               VkAccessFlags                   dstAccessMask_,
+                                                                               VkDependencyFlags               dependencyFlags_,
+                                                                               deInt32                                 viewOffset_)
+{
+       sType                   = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR;
+       pNext                   = pNext_;
+       srcSubpass              = srcSubpass_;
+       dstSubpass              = dstSubpass_;
+       srcStageMask    = srcStageMask_;
+       dstStageMask    = dstStageMask_;
+       srcAccessMask   = srcAccessMask_;
+       dstAccessMask   = dstAccessMask_;
+       dependencyFlags = dependencyFlags_;
+       viewOffset              = viewOffset_;
+}
+
+RenderPassCreateInfo1::RenderPassCreateInfo1 (const void*                                              pNext_,
+                                                                                         VkRenderPassCreateFlags                       flags_,
+                                                                                         deUint32                                                      attachmentCount_,
+                                                                                         const VkAttachmentDescription*        pAttachments_,
+                                                                                         deUint32                                                      subpassCount_,
+                                                                                         const VkSubpassDescription*           pSubpasses_,
+                                                                                         deUint32                                                      dependencyCount_,
+                                                                                         const VkSubpassDependency*            pDependencies_,
+                                                                                         deUint32                                                      correlatedViewMaskCount_,
+                                                                                         const deUint32*                                       pCorrelatedViewMasks_)
+{
+       DE_ASSERT(correlatedViewMaskCount_ == 0);
+       DE_ASSERT(pCorrelatedViewMasks_ == DE_NULL);
+
+       sType                                   = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
+       pNext                                   = pNext_;
+       flags                                   = flags_;
+       attachmentCount                 = attachmentCount_;
+       pAttachments                    = pAttachments_;
+       subpassCount                    = subpassCount_;
+       pSubpasses                              = pSubpasses_;
+       dependencyCount                 = dependencyCount_;
+       pDependencies                   = pDependencies_;
+       DE_UNREF                                (correlatedViewMaskCount_);
+       DE_UNREF                                (pCorrelatedViewMasks_);
+}
+
+Move<VkRenderPass>     RenderPassCreateInfo1::createRenderPass (const DeviceInterface& vk, VkDevice device) const
+{
+       return vk::createRenderPass(vk, device, this);
+}
+
+RenderPassCreateInfo2::RenderPassCreateInfo2 (const void*                                                      pNext_,
+                                                                                         VkRenderPassCreateFlags                               flags_,
+                                                                                         deUint32                                                              attachmentCount_,
+                                                                                         const VkAttachmentDescription2KHR*    pAttachments_,
+                                                                                         deUint32                                                              subpassCount_,
+                                                                                         const VkSubpassDescription2KHR*               pSubpasses_,
+                                                                                         deUint32                                                              dependencyCount_,
+                                                                                         const VkSubpassDependency2KHR*                pDependencies_,
+                                                                                         deUint32                                                              correlatedViewMaskCount_,
+                                                                                         const deUint32*                                               pCorrelatedViewMasks_)
+{
+       sType                                   = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR;
+       pNext                                   = pNext_;
+       flags                                   = flags_;
+       attachmentCount                 = attachmentCount_;
+       pAttachments                    = pAttachments_;
+       subpassCount                    = subpassCount_;
+       pSubpasses                              = pSubpasses_;
+       dependencyCount                 = dependencyCount_;
+       pDependencies                   = pDependencies_;
+       correlatedViewMaskCount = correlatedViewMaskCount_;
+       pCorrelatedViewMasks    = pCorrelatedViewMasks_;
+}
+
+Move<VkRenderPass>     RenderPassCreateInfo2::createRenderPass (const DeviceInterface& vk, VkDevice device) const
+{
+       return vk::createRenderPass2KHR(vk, device, this);
+}
+
+SubpassBeginInfo1::SubpassBeginInfo1 (const void*              pNext_,
+                                                                         VkSubpassContents     contents_)
+       : contents      (contents_)
+{
+       DE_ASSERT(pNext_ == DE_NULL);
+
+       DE_UNREF(pNext_);
+}
+
+SubpassBeginInfo2::SubpassBeginInfo2 (const void*              pNext_,
+                                                                         VkSubpassContents     contents_)
+{
+       sType           = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR;
+       pNext           = pNext_;
+       contents        = contents_;
+}
+
+SubpassEndInfo1::SubpassEndInfo1 (const void*  pNext_)
+{
+       DE_ASSERT(pNext_ == DE_NULL);
+
+       DE_UNREF(pNext_);
+}
+
+SubpassEndInfo2::SubpassEndInfo2 (const void*  pNext_)
+{
+       sType   = VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR;
+       pNext   = pNext_;
+}
+
+void RenderpassSubpass1::cmdBeginRenderPass (const DeviceInterface&                    vk,
+                                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                                        const VkRenderPassBeginInfo*   pRenderPassBegin,
+                                                                                        const SubpassBeginInfo*                pSubpassBeginInfo)
+{
+       DE_ASSERT(pSubpassBeginInfo != DE_NULL);
+
+       vk.cmdBeginRenderPass(cmdBuffer, pRenderPassBegin, pSubpassBeginInfo->contents);
+}
+
+void RenderpassSubpass1::cmdNextSubpass (const DeviceInterface&                vk,
+                                                                                VkCommandBuffer                        cmdBuffer,
+                                                                                const SubpassBeginInfo*        pSubpassBeginInfo,
+                                                                                const SubpassEndInfo*          pSubpassEndInfo)
+{
+       DE_UNREF(pSubpassEndInfo);
+       DE_ASSERT(pSubpassBeginInfo != DE_NULL);
+
+       vk.cmdNextSubpass(cmdBuffer, pSubpassBeginInfo->contents);
+}
+
+void RenderpassSubpass1::cmdEndRenderPass (const DeviceInterface&      vk,
+                                                                                  VkCommandBuffer                      cmdBuffer,
+                                                                                  const SubpassEndInfo*        pSubpassEndInfo)
+{
+       DE_UNREF(pSubpassEndInfo);
+
+       vk.cmdEndRenderPass(cmdBuffer);
+}
+
+void RenderpassSubpass2::cmdBeginRenderPass (const DeviceInterface&                    vk,
+                                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                                        const VkRenderPassBeginInfo*   pRenderPassBegin,
+                                                                                        const SubpassBeginInfo*                pSubpassBeginInfo)
+{
+       vk.cmdBeginRenderPass2KHR(cmdBuffer, pRenderPassBegin, pSubpassBeginInfo);
+}
+
+void RenderpassSubpass2::cmdNextSubpass (const DeviceInterface&                vk,
+                                                                                VkCommandBuffer                        cmdBuffer,
+                                                                                const SubpassBeginInfo*        pSubpassBeginInfo,
+                                                                                const SubpassEndInfo*          pSubpassEndInfo)
+{
+       DE_ASSERT(pSubpassBeginInfo != DE_NULL);
+       DE_ASSERT(pSubpassEndInfo != DE_NULL);
+
+       vk.cmdNextSubpass2KHR(cmdBuffer, pSubpassBeginInfo, pSubpassEndInfo);
+}
+
+void RenderpassSubpass2::cmdEndRenderPass (const DeviceInterface&      vk,
+                                                                                  VkCommandBuffer                      cmdBuffer,
+                                                                                  const SubpassEndInfo*        pSubpassEndInfo)
+{
+       DE_ASSERT(pSubpassEndInfo != DE_NULL);
+
+       vk.cmdEndRenderPass2KHR(cmdBuffer, pSubpassEndInfo);
+}
+
+} // renderpass
+
+} // vkt
+
diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.hpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.hpp
new file mode 100644 (file)
index 0000000..1e80c3e
--- /dev/null
@@ -0,0 +1,257 @@
+#ifndef _VKTMULTIVIEWRENDERPASSUTIL_HPP
+#define _VKTMULTIVIEWRENDERPASSUTIL_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 The Khronos Group Inc.
+ *
+ * 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 RenderPass utils
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "vkRef.hpp"
+#include "vkDefs.hpp"
+#include "vkTypeUtil.hpp"
+
+namespace vkt
+{
+namespace MultiView
+{
+using namespace vk;
+
+class AttachmentDescription1 : public vk::VkAttachmentDescription
+{
+public:
+       AttachmentDescription1  (const void*                                    pNext,
+                                                        VkAttachmentDescriptionFlags   flags,
+                                                        VkFormat                                               format,
+                                                        VkSampleCountFlagBits                  samples,
+                                                        VkAttachmentLoadOp                             loadOp,
+                                                        VkAttachmentStoreOp                    storeOp,
+                                                        VkAttachmentLoadOp                             stencilLoadOp,
+                                                        VkAttachmentStoreOp                    stencilStoreOp,
+                                                        VkImageLayout                                  initialLayout,
+                                                        VkImageLayout                                  finalLayout);
+};
+
+class AttachmentDescription2 : public vk::VkAttachmentDescription2KHR
+{
+public:
+       AttachmentDescription2  (const void*                                    pNext,
+                                                        VkAttachmentDescriptionFlags   flags,
+                                                        VkFormat                                               format,
+                                                        VkSampleCountFlagBits                  samples,
+                                                        VkAttachmentLoadOp                             loadOp,
+                                                        VkAttachmentStoreOp                    storeOp,
+                                                        VkAttachmentLoadOp                             stencilLoadOp,
+                                                        VkAttachmentStoreOp                    stencilStoreOp,
+                                                        VkImageLayout                                  initialLayout,
+                                                        VkImageLayout                                  finalLayout);
+};
+
+class AttachmentReference1 : public vk::VkAttachmentReference
+{
+public:
+       AttachmentReference1    (const void*            pNext,
+                                                        deUint32                       attachment,
+                                                        VkImageLayout          layout,
+                                                        VkImageAspectFlags     aspectMask);
+};
+
+class AttachmentReference2 : public vk::VkAttachmentReference2KHR
+{
+public:
+       AttachmentReference2    (const void*            pNext,
+                                                        deUint32                       attachment,
+                                                        VkImageLayout          layout,
+                                                        VkImageAspectFlags     aspectMask);
+};
+
+class SubpassDescription1 : public vk::VkSubpassDescription
+{
+public:
+       SubpassDescription1     (const void*                                            pNext,
+                                                VkSubpassDescriptionFlags                      flags,
+                                                VkPipelineBindPoint                            pipelineBindPoint,
+                                                deUint32                                                       viewMask,
+                                                deUint32                                                       inputAttachmentCount,
+                                                const VkAttachmentReference*           pInputAttachments,
+                                                deUint32                                                       colorAttachmentCount,
+                                                const VkAttachmentReference*           pColorAttachments,
+                                                const VkAttachmentReference*           pResolveAttachments,
+                                                const VkAttachmentReference*           pDepthStencilAttachment,
+                                                deUint32                                                       preserveAttachmentCount,
+                                                const deUint32*                                        pPreserveAttachments);
+};
+
+class SubpassDescription2 : public vk::VkSubpassDescription2KHR
+{
+public:
+       SubpassDescription2     (const void*                                            pNext,
+                                                VkSubpassDescriptionFlags                      flags,
+                                                VkPipelineBindPoint                            pipelineBindPoint,
+                                                deUint32                                                       viewMask,
+                                                deUint32                                                       inputAttachmentCount,
+                                                const VkAttachmentReference2KHR*       pInputAttachments,
+                                                deUint32                                                       colorAttachmentCount,
+                                                const VkAttachmentReference2KHR*       pColorAttachments,
+                                                const VkAttachmentReference2KHR*       pResolveAttachments,
+                                                const VkAttachmentReference2KHR*       pDepthStencilAttachment,
+                                                deUint32                                                       preserveAttachmentCount,
+                                                const deUint32*                                        pPreserveAttachments);
+};
+
+class SubpassDependency1 : public vk::VkSubpassDependency
+{
+public:
+       SubpassDependency1      (const void*                    pNext,
+                                                deUint32                               srcSubpass,
+                                                deUint32                               dstSubpass,
+                                                VkPipelineStageFlags   srcStageMask,
+                                                VkPipelineStageFlags   dstStageMask,
+                                                VkAccessFlags                  srcAccessMask,
+                                                VkAccessFlags                  dstAccessMask,
+                                                VkDependencyFlags              dependencyFlags,
+                                                deInt32                                viewOffset);
+};
+
+class SubpassDependency2 : public vk::VkSubpassDependency2KHR
+{
+public:
+       SubpassDependency2      (const void*                    pNext,
+                                                deUint32                               srcSubpass,
+                                                deUint32                               dstSubpass,
+                                                VkPipelineStageFlags   srcStageMask,
+                                                VkPipelineStageFlags   dstStageMask,
+                                                VkAccessFlags                  srcAccessMask,
+                                                VkAccessFlags                  dstAccessMask,
+                                                VkDependencyFlags              dependencyFlags,
+                                                deInt32                                viewOffset);
+};
+
+class RenderPassCreateInfo1 : public VkRenderPassCreateInfo
+{
+public:
+                                                       RenderPassCreateInfo1   (const void*                                            pNext,
+                                                                                                        VkRenderPassCreateFlags                        flags,
+                                                                                                        deUint32                                                       attachmentCount,
+                                                                                                        const VkAttachmentDescription*         pAttachments,
+                                                                                                        deUint32                                                       subpassCount,
+                                                                                                        const VkSubpassDescription*            pSubpasses,
+                                                                                                        deUint32                                                       dependencyCount,
+                                                                                                        const VkSubpassDependency*                     pDependencies,
+                                                                                                        deUint32                                                       correlatedViewMaskCount,
+                                                                                                        const deUint32*                                        pCorrelatedViewMasks);
+
+       Move<VkRenderPass>              createRenderPass                (const DeviceInterface& vk,
+                                                                                                        VkDevice device) const;
+};
+
+class RenderPassCreateInfo2 : public VkRenderPassCreateInfo2KHR
+{
+public:
+                                                       RenderPassCreateInfo2   (const void*                                            pNext,
+                                                                                                        VkRenderPassCreateFlags                        flags,
+                                                                                                        deUint32                                                       attachmentCount,
+                                                                                                        const VkAttachmentDescription2KHR*     pAttachments,
+                                                                                                        deUint32                                                       subpassCount,
+                                                                                                        const VkSubpassDescription2KHR*        pSubpasses,
+                                                                                                        deUint32                                                       dependencyCount,
+                                                                                                        const VkSubpassDependency2KHR*         pDependencies,
+                                                                                                        deUint32                                                       correlatedViewMaskCount,
+                                                                                                        const deUint32*                                        pCorrelatedViewMasks);
+
+       Move<VkRenderPass>              createRenderPass                (const DeviceInterface& vk,
+                                                                                                        VkDevice device) const;
+};
+
+class SubpassBeginInfo1
+{
+public:
+                                               SubpassBeginInfo1       (const void*            pNext,
+                                                                                        VkSubpassContents      contents);
+
+       VkSubpassContents       contents;
+};
+
+class SubpassBeginInfo2 : public VkSubpassBeginInfoKHR
+{
+public:
+                                               SubpassBeginInfo2       (const void*            pNext,
+                                                                                        VkSubpassContents      contents);
+};
+
+class SubpassEndInfo1
+{
+public:
+                                               SubpassEndInfo1 (const void*    pNext);
+};
+
+class SubpassEndInfo2 : public VkSubpassEndInfoKHR
+{
+public:
+                                               SubpassEndInfo2 (const void*    pNext);
+};
+
+class RenderpassSubpass1
+{
+public:
+       typedef SubpassBeginInfo1               SubpassBeginInfo;
+       typedef SubpassEndInfo1                 SubpassEndInfo;
+
+       static void     cmdBeginRenderPass      (const DeviceInterface&                 vk,
+                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                        const VkRenderPassBeginInfo*   pRenderPassBegin,
+                                                                        const SubpassBeginInfo*                pSubpassBeginInfo);
+
+       static void     cmdNextSubpass          (const DeviceInterface&                 vk,
+                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                        const SubpassBeginInfo*                pSubpassBeginInfo,
+                                                                        const SubpassEndInfo*                  pSubpassEndInfo);
+
+       static void     cmdEndRenderPass        (const DeviceInterface&                 vk,
+                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                        const SubpassEndInfo*                  pSubpassEndInfo);
+};
+
+class RenderpassSubpass2
+{
+public:
+       typedef SubpassBeginInfo2               SubpassBeginInfo;
+       typedef SubpassEndInfo2                 SubpassEndInfo;
+
+       static void     cmdBeginRenderPass      (const DeviceInterface&                 vk,
+                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                        const VkRenderPassBeginInfo*   pRenderPassBegin,
+                                                                        const SubpassBeginInfo*                pSubpassBeginInfo);
+
+       static void     cmdNextSubpass          (const DeviceInterface&                 vk,
+                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                        const SubpassBeginInfo*                pSubpassBeginInfo,
+                                                                        const SubpassEndInfo*                  pSubpassEndInfo);
+
+       static void     cmdEndRenderPass        (const DeviceInterface&                 vk,
+                                                                        VkCommandBuffer                                cmdBuffer,
+                                                                        const SubpassEndInfo*                  pSubpassEndInfo);
+};
+
+} // renderpass
+
+} // vkt
+
+#endif // _VKTMULTIVIEWRENDERPASSUTIL_HPP
index 87a7f4a..3260c3b 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "vktMultiViewRenderTests.hpp"
 #include "vktMultiViewRenderUtil.hpp"
+#include "vktMultiViewRenderPassUtil.hpp"
 
 #include "vktTestCase.hpp"
 #include "vkBuilderUtil.hpp"
@@ -87,6 +88,12 @@ enum TestType
        TEST_TYPE_LAST
 };
 
+enum RenderPassType
+{
+       RENDERPASS_TYPE_LEGACY = 0,
+       RENDERPASS_TYPE_RENDERPASS2,
+};
+
 struct TestParameters
 {
        VkExtent3D                              extent;
@@ -94,11 +101,122 @@ struct TestParameters
        TestType                                viewIndex;
        VkSampleCountFlagBits   samples;
        VkFormat                                colorFormat;
+       RenderPassType                  renderPassType;
 };
 
 const int      TEST_POINT_SIZE_SMALL   = 2;
 const int      TEST_POINT_SIZE_WIDE    = 4;
 
+vk::Move<vk::VkRenderPass> makeRenderPass (const DeviceInterface&              vk,
+                                                                                  const VkDevice                               device,
+                                                                                  const VkFormat                               colorFormat,
+                                                                                  const vector<deUint32>&              viewMasks,
+                                                                                  RenderPassType                               renderPassType,
+                                                                                  const VkSampleCountFlagBits  samples = VK_SAMPLE_COUNT_1_BIT,
+                                                                                  const VkAttachmentLoadOp             colorLoadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
+                                                                                  const VkFormat                               dsFormat = VK_FORMAT_UNDEFINED)
+{
+       switch (renderPassType)
+       {
+               case RENDERPASS_TYPE_LEGACY:
+                       return MultiView::makeRenderPass<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>(vk, device, colorFormat, viewMasks, samples, colorLoadOp, dsFormat);
+               case RENDERPASS_TYPE_RENDERPASS2:
+                       return MultiView::makeRenderPass<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>(vk, device, colorFormat, viewMasks, samples, colorLoadOp, dsFormat);
+               default:
+                       TCU_THROW(InternalError, "Impossible");
+       }
+}
+
+vk::Move<vk::VkRenderPass> makeRenderPassWithAttachments (const DeviceInterface&       vk,
+                                                                                                                 const VkDevice                        device,
+                                                                                                                 const VkFormat                        colorFormat,
+                                                                                                                 const vector<deUint32>&       viewMasks,
+                                                                                                                 RenderPassType                        renderPassType)
+{
+       switch (renderPassType)
+       {
+               case RENDERPASS_TYPE_LEGACY:
+                       return MultiView::makeRenderPassWithAttachments<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>(vk, device, colorFormat, viewMasks);
+               case RENDERPASS_TYPE_RENDERPASS2:
+                       return MultiView::makeRenderPassWithAttachments<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>(vk, device, colorFormat, viewMasks);
+               default:
+                       TCU_THROW(InternalError, "Impossible");
+       }
+}
+
+vk::Move<vk::VkRenderPass> makeRenderPassWithDepth (const DeviceInterface&     vk,
+                                                                                                       const VkDevice                  device,
+                                                                                                       const VkFormat                  colorFormat,
+                                                                                                       const vector<deUint32>& viewMasks,
+                                                                                                       const                                   VkFormat dsFormat,
+                                                                                                       RenderPassType                  renderPassType)
+{
+       switch (renderPassType)
+       {
+               case RENDERPASS_TYPE_LEGACY:
+                       return MultiView::makeRenderPassWithDepth<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>(vk, device, colorFormat, viewMasks, dsFormat);
+               case RENDERPASS_TYPE_RENDERPASS2:
+                       return MultiView::makeRenderPassWithDepth<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>(vk, device, colorFormat, viewMasks, dsFormat);
+               default:
+                       TCU_THROW(InternalError, "Impossible");
+       }
+}
+
+template<typename RenderpassSubpass>
+void cmdBeginRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassContents contents)
+{
+       const typename RenderpassSubpass::SubpassBeginInfo      subpassBeginInfo        (DE_NULL, contents);
+
+       RenderpassSubpass::cmdBeginRenderPass(vkd, cmdBuffer, pRenderPassBegin, &subpassBeginInfo);
+}
+
+void cmdBeginRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassContents contents, RenderPassType renderPassType)
+{
+       switch (renderPassType)
+       {
+               case RENDERPASS_TYPE_LEGACY:            cmdBeginRenderPass<RenderpassSubpass1>(vkd, cmdBuffer, pRenderPassBegin, contents);     break;
+               case RENDERPASS_TYPE_RENDERPASS2:       cmdBeginRenderPass<RenderpassSubpass2>(vkd, cmdBuffer, pRenderPassBegin, contents);     break;
+               default:                                                        TCU_THROW(InternalError, "Impossible");
+       }
+}
+
+template<typename RenderpassSubpass>
+void cmdNextSubpass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkSubpassContents contents)
+{
+       const typename RenderpassSubpass::SubpassBeginInfo      subpassBeginInfo        (DE_NULL, contents);
+       const typename RenderpassSubpass::SubpassEndInfo        subpassEndInfo          (DE_NULL);
+
+       RenderpassSubpass::cmdNextSubpass(vkd, cmdBuffer, &subpassBeginInfo, &subpassEndInfo);
+}
+
+void cmdNextSubpass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkSubpassContents contents, RenderPassType renderPassType)
+{
+       switch (renderPassType)
+       {
+               case RENDERPASS_TYPE_LEGACY:            cmdNextSubpass<RenderpassSubpass1>(vkd, cmdBuffer, contents);   break;
+               case RENDERPASS_TYPE_RENDERPASS2:       cmdNextSubpass<RenderpassSubpass2>(vkd, cmdBuffer, contents);   break;
+               default:                                                        TCU_THROW(InternalError, "Impossible");
+       }
+}
+
+template<typename RenderpassSubpass>
+void cmdEndRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer)
+{
+       const typename RenderpassSubpass::SubpassEndInfo        subpassEndInfo  (DE_NULL);
+
+       RenderpassSubpass::cmdEndRenderPass(vkd, cmdBuffer, &subpassEndInfo);
+}
+
+void cmdEndRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, RenderPassType renderPassType)
+{
+       switch (renderPassType)
+       {
+               case RENDERPASS_TYPE_LEGACY:            cmdEndRenderPass<RenderpassSubpass1>(vkd, cmdBuffer);   break;
+               case RENDERPASS_TYPE_RENDERPASS2:       cmdEndRenderPass<RenderpassSubpass2>(vkd, cmdBuffer);   break;
+               default:                                                        TCU_THROW(InternalError, "Impossible");
+       }
+}
+
 class ImageAttachment
 {
 public:
@@ -171,6 +289,7 @@ protected:
        void                                                    fillLayer                               (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx);
        void                                                    fillQuarter                             (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter, const deUint32 subpassNdx);
 
+       const bool                                              m_extensionSupported;
        const TestParameters                    m_parameters;
        const int                                               m_seed;
        const deUint32                                  m_squareCount;
@@ -197,6 +316,7 @@ protected:
 
 MultiViewRenderTestInstance::MultiViewRenderTestInstance (Context& context, const TestParameters& parameters)
        : TestInstance                  (context)
+       , m_extensionSupported  ((parameters.renderPassType == RENDERPASS_TYPE_RENDERPASS2) && context.requireDeviceExtension("VK_KHR_create_renderpass2"))
        , m_parameters                  (fillMissingParameters(parameters))
        , m_seed                                (context.getTestContext().getCommandLine().getBaseSeed())
        , m_squareCount                 (4u)
@@ -228,7 +348,7 @@ tcu::TestStatus MultiViewRenderTestInstance::iterate (void)
        const deUint32                                                          subpassCount                            = static_cast<deUint32>(m_parameters.viewMasks.size());
 
        // FrameBuffer & renderPass
-       Unique<VkRenderPass>                                            renderPass                                      (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks));
+       Unique<VkRenderPass>                                            renderPass                                      (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType));
 
        vector<VkImageView>                                                     attachments;
        attachments.push_back(m_colorAttachment->getImageView());
@@ -311,15 +431,28 @@ void MultiViewRenderTestInstance::afterDraw (void)
 
 void MultiViewRenderTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
 
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
+
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -337,10 +470,10 @@ void MultiViewRenderTestInstance::draw (const deUint32 subpassCount, VkRenderPas
                                m_device->cmdDraw(*m_cmdBuffer, 4u, 1u, (drawNdx + subpassNdx % m_squareCount) * 4u, 0u);
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -574,6 +707,10 @@ void MultiViewRenderTestInstance::createMultiViewDevices (void)
                if (!isCoreDeviceExtension(m_context.getUsedApiVersion(), "VK_KHR_multiview"))
                        deviceExtensions.push_back("VK_KHR_multiview");
 
+               if (m_parameters.renderPassType == RENDERPASS_TYPE_RENDERPASS2)
+                       if (!isCoreDeviceExtension(m_context.getUsedApiVersion(), "VK_KHR_create_renderpass2"))
+                               deviceExtensions.push_back("VK_KHR_create_renderpass2");
+
                const VkDeviceCreateInfo                deviceInfo                      =
                {
                        VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,                                                   //VkStructureType                                       sType;
@@ -1349,7 +1486,7 @@ tcu::TestStatus MultiViewAttachmentsTestInstance::iterate (void)
        m_inputAttachment       = de::SharedPtr<ImageAttachment>(new ImageAttachment(*m_logicalDevice, *m_device, *m_allocator, m_parameters.extent, m_parameters.colorFormat));
 
        // FrameBuffer & renderPass
-       Unique<VkRenderPass>                                            renderPass                              (makeRenderPassWithAttachments(*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks));
+       Unique<VkRenderPass>                                            renderPass                              (makeRenderPassWithAttachments(*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType));
 
        vector<VkImageView>                                                     attachments;
        attachments.push_back(m_colorAttachment->getImageView());
@@ -1581,17 +1718,29 @@ void MultiViewInstancedTestInstance::createVertexData (void)
        appendVertex(tcu::Vec4( 0.0f, 0.0f, 1.0f, 1.0f), color);
 }
 
-void MultiViewInstancedTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewInstancedTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
 
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -1602,10 +1751,10 @@ void MultiViewInstancedTestInstance::draw (const deUint32 subpassCount,VkRenderP
                m_device->cmdDraw(*m_cmdBuffer, 4u, drawCountPerSubpass, 0u, subpassNdx % m_squareCount);
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -1619,6 +1768,7 @@ public:
                                MultiViewInputRateInstanceTestInstance  (Context& context, const TestParameters& parameters);
 protected:
        void            createVertexData                                                (void);
+
        void            draw                                                                    (const deUint32                 subpassCount,
                                                                                                                 VkRenderPass                   renderPass,
                                                                                                                 VkFramebuffer                  frameBuffer,
@@ -1638,17 +1788,29 @@ void MultiViewInputRateInstanceTestInstance::createVertexData (void)
        appendVertex(tcu::Vec4( 0.0f, 0.0f, 1.0f, 1.0f), tcu::Vec4(0.5f, 0.0f, 0.4f, 1.0f));
 }
 
-void MultiViewInputRateInstanceTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewInputRateInstanceTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
 
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -1660,10 +1822,10 @@ void MultiViewInputRateInstanceTestInstance::draw (const deUint32 subpassCount,V
                        m_device->cmdDraw(*m_cmdBuffer, 4u, 4u, 0u, 0u);
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -1676,6 +1838,7 @@ class MultiViewDrawIndirectTestInstance : public MultiViewRenderTestInstance
 public:
                                MultiViewDrawIndirectTestInstance       (Context& context, const TestParameters& parameters);
 protected:
+
        void            draw                                                            (const deUint32                 subpassCount,
                                                                                                         VkRenderPass                   renderPass,
                                                                                                         VkFramebuffer                  frameBuffer,
@@ -1687,12 +1850,14 @@ MultiViewDrawIndirectTestInstance::MultiViewDrawIndirectTestInstance (Context& c
 {
 }
 
-void MultiViewDrawIndirectTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewDrawIndirectTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
        typedef de::SharedPtr<Unique<VkBuffer> >                BufferSP;
        typedef de::SharedPtr<UniquePtr<Allocation> >   AllocationSP;
 
        const size_t                                    nonCoherentAtomSize             = static_cast<size_t>(m_context.getDeviceProperties().limits.nonCoherentAtomSize);
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
@@ -1759,11 +1924,22 @@ void MultiViewDrawIndirectTestInstance::draw (const deUint32 subpassCount,VkRend
                indirectAllocations[subpassNdx] = (AllocationSP(new UniquePtr<Allocation>(allocationBuffer)));
        }
 
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
+
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -1793,10 +1969,10 @@ void MultiViewDrawIndirectTestInstance::draw (const deUint32 subpassCount,VkRend
                }
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -1820,17 +1996,30 @@ MultiViewClearAttachmentsTestInstance::MultiViewClearAttachmentsTestInstance (Co
 {
 }
 
-void MultiViewClearAttachmentsTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewClearAttachmentsTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
 
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
+
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -1879,10 +2068,10 @@ void MultiViewClearAttachmentsTestInstance::draw (const deUint32 subpassCount,Vk
                m_device->cmdClearAttachments(*m_cmdBuffer, 1u, &clearAttachment, 1u, &clearRect);
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -1910,15 +2099,27 @@ void MultiViewSecondaryCommandBufferTestInstance::draw (const deUint32 subpassCo
 {
        typedef de::SharedPtr<Unique<VkCommandBuffer> > VkCommandBufferSp;
 
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
 
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
 
        //Create secondary buffer
        const VkCommandBufferAllocateInfo       cmdBufferAllocateInfo   =
@@ -1946,10 +2147,10 @@ void MultiViewSecondaryCommandBufferTestInstance::draw (const deUint32 subpassCo
 
                m_device->cmdExecuteCommands(*m_cmdBuffer, 1u, &cmdBufferSecondary.back().get()->get());
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -2012,15 +2213,28 @@ void MultiViewPointSizeTestInstance::createVertexData (void)
 
 void MultiViewPointSizeTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
 
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
+
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -2032,10 +2246,10 @@ void MultiViewPointSizeTestInstance::draw (const deUint32 subpassCount, VkRender
                        m_device->cmdDraw(*m_cmdBuffer, 1u, 1u, drawNdx + subpassNdx % m_squareCount, 0u);
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -2050,6 +2264,7 @@ public:
 protected:
        tcu::TestStatus iterate                                                 (void);
        void                    createVertexData                                (void);
+
        void                    draw                                                    (const deUint32                 subpassCount,
                                                                                                         VkRenderPass                   renderPass,
                                                                                                         VkFramebuffer                  frameBuffer,
@@ -2071,7 +2286,7 @@ tcu::TestStatus MultiViewMultsampleTestInstance::iterate (void)
        const deUint32                                                          subpassCount                            = static_cast<deUint32>(m_parameters.viewMasks.size());
 
        // FrameBuffer & renderPass
-       Unique<VkRenderPass>                                            renderPass                                      (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, VK_SAMPLE_COUNT_2_BIT));
+       Unique<VkRenderPass>                                            renderPass                                      (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType, VK_SAMPLE_COUNT_2_BIT));
 
        vector<VkImageView>                                                     attachments;
        attachments.push_back(m_colorAttachment->getImageView());
@@ -2138,6 +2353,8 @@ void MultiViewMultsampleTestInstance::createVertexData (void)
 
 void MultiViewMultsampleTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
@@ -2158,11 +2375,22 @@ void MultiViewMultsampleTestInstance::draw (const deUint32 subpassCount, VkRende
                makeExtent3D(m_parameters.extent.width, m_parameters.extent.height, 1u),        //  VkExtent3D                                  extent;
        };
 
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
+
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -2174,10 +2402,10 @@ void MultiViewMultsampleTestInstance::draw (const deUint32 subpassCount, VkRende
                        m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -2216,6 +2444,7 @@ public:
 protected:
        tcu::TestStatus         iterate                                                 (void);
        void                            createVertexData                                (void);
+
        void                            draw                                                    (const deUint32                 subpassCount,
                                                                                                                 VkRenderPass                   renderPass,
                                                                                                                 VkFramebuffer                  frameBuffer,
@@ -2251,7 +2480,7 @@ MultiViewQueriesTestInstance::MultiViewQueriesTestInstance (Context& context, co
 tcu::TestStatus MultiViewQueriesTestInstance::iterate (void)
 {
        const deUint32                                                          subpassCount                    = static_cast<deUint32>(m_parameters.viewMasks.size());
-       Unique<VkRenderPass>                                            renderPass                              (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks));
+       Unique<VkRenderPass>                                            renderPass                              (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType));
        vector<VkImageView>                                                     attachments                             (1u, m_colorAttachment->getImageView());
        Unique<VkFramebuffer>                                           frameBuffer                             (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u));
        Unique<VkPipelineLayout>                                        pipelineLayout                  (makePipelineLayout(*m_device, *m_logicalDevice));
@@ -2377,10 +2606,22 @@ void MultiViewQueriesTestInstance::createVertexData (void)
 
 void MultiViewQueriesTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                          renderArea                                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                      renderPassClearValue                    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                          vertexBuffers[]                                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                      vertexBufferOffsets[]                   = {                   0u,                   0u };
        const deUint32                          drawCountPerSubpass                             = (subpassCount == 1) ? m_squareCount : 1u;
        const deUint32                          queryCountersNumber                             = (subpassCount == 1) ? m_squareCount * getUsedViewsCount(0) : getQueryCountersNumber();
+       const VkRenderPassBeginInfo     renderPassBeginInfo                             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       //  VkStructureType             sType;
+               DE_NULL,                                                                        //  const void*                 pNext;
+               renderPass,                                                                     //  VkRenderPass                renderPass;
+               frameBuffer,                                                            //  VkFramebuffer               framebuffer;
+               renderArea,                                                                     //  VkRect2D                    renderArea;
+               1u,                                                                                     //  uint32_t                    clearValueCount;
+               &renderPassClearValue,                                          //  const VkClearValue* pClearValues;
+       };
        const VkQueryPoolCreateInfo     occlusionQueryPoolCreateInfo    =
        {
                VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,       //  VkStructureType                                     sType;
@@ -2409,7 +2650,7 @@ void MultiViewQueriesTestInstance::draw (const deUint32 subpassCount, VkRenderPa
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -2450,12 +2691,12 @@ void MultiViewQueriesTestInstance::draw (const deUint32 subpassCount, VkRenderPa
                }
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
        DE_ASSERT(queryStartIndex == queryCountersNumber);
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -2546,7 +2787,7 @@ tcu::TestStatus MultiViewReadbackTestInstance::iterate (void)
                                                                                                                                          (m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR) ? VK_ATTACHMENT_LOAD_OP_CLEAR :
                                                                                                                                          (m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR) ? VK_ATTACHMENT_LOAD_OP_DONT_CARE :
                                                                                                                                          VK_ATTACHMENT_LOAD_OP_LAST;
-               Unique<VkRenderPass>                                            renderPass              (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, VK_SAMPLE_COUNT_1_BIT, loadOp));
+               Unique<VkRenderPass>                                            renderPass              (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType, VK_SAMPLE_COUNT_1_BIT, loadOp));
                vector<VkImageView>                                                     attachments             (1u, m_colorAttachment->getImageView());
                Unique<VkFramebuffer>                                           frameBuffer             (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u));
                Unique<VkPipelineLayout>                                        pipelineLayout  (makePipelineLayout(*m_device, *m_logicalDevice));
@@ -2595,19 +2836,27 @@ void MultiViewReadbackTestInstance::beforeDraw (void)
 
 void MultiViewReadbackTestInstance::drawClears (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines, const bool clearPass)
 {
-       const VkRect2D                                  renderArea                              = makeRect2D(m_parameters.extent);
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(m_colorTable[0]);
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
        const bool                                              withClearColor                  = (clearPass && m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR);
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,                       //  VkStructureType             sType;
+               DE_NULL,                                                                                        //  const void*                 pNext;
+               renderPass,                                                                                     //  VkRenderPass                renderPass;
+               frameBuffer,                                                                            //  VkFramebuffer               framebuffer;
+               renderArea,                                                                                     //  VkRect2D                    renderArea;
+               withClearColor ? 1u : 0u,                                                       //  uint32_t                    clearValueCount;
+               withClearColor ? &renderPassClearValue : DE_NULL,       //  const VkClearValue* pClearValues;
+       };
 
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        if (clearPass)
                beforeDraw();
 
-       if (withClearColor)
-               beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), m_colorTable[0]);
-       else
-               beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
@@ -2629,10 +2878,10 @@ void MultiViewReadbackTestInstance::drawClears (const deUint32 subpassCount, VkR
                }
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        if (!clearPass)
                afterDraw();
@@ -2666,6 +2915,7 @@ public:
 protected:
        tcu::TestStatus         iterate                                                         (void);
        void                            createVertexData                                        (void);
+
        void                            draw                                                            (const deUint32                                 subpassCount,
                                                                                                                         VkRenderPass                                   renderPass,
                                                                                                                         VkFramebuffer                                  frameBuffer,
@@ -2861,7 +3111,7 @@ void MultiViewDepthStencilTestInstance::readImage (VkImage image, const tcu::Pix
 tcu::TestStatus MultiViewDepthStencilTestInstance::iterate (void)
 {
        const deUint32                                                          subpassCount                            = static_cast<deUint32>(m_parameters.viewMasks.size());
-       Unique<VkRenderPass>                                            renderPass                                      (makeRenderPassWithDepth (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_dsFormat));
+       Unique<VkRenderPass>                                            renderPass                                      (makeRenderPassWithDepth (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_dsFormat, m_parameters.renderPassType));
        vector<VkImageView>                                                     attachments                                     (makeAttachmentsVector());
        Unique<VkFramebuffer>                                           frameBuffer                                     (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u));
        Unique<VkPipelineLayout>                                        pipelineLayout                          (makePipelineLayout(*m_device, *m_logicalDevice));
@@ -2992,16 +3242,28 @@ void MultiViewDepthStencilTestInstance::createVertexData (void)
 
 void MultiViewDepthStencilTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
 {
+       const VkRect2D                                  renderArea                              = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+       const VkClearValue                              renderPassClearValue    = makeClearValueColor(tcu::Vec4(0.0f));
        const VkBuffer                                  vertexBuffers[]                 = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
        const VkDeviceSize                              vertexBufferOffsets[]   = {                   0u,                   0u };
        const deUint32                                  drawCountPerSubpass             = (subpassCount == 1) ? m_squareCount : 1u;
        const deUint32                                  vertexPerPrimitive              = 4u;
+       const VkRenderPassBeginInfo             renderPassBeginInfo             =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,       // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               renderPass,                                                                     // VkRenderPass                 renderPass;
+               frameBuffer,                                                            // VkFramebuffer                framebuffer;
+               renderArea,                                                                     // VkRect2D                             renderArea;
+               1u,                                                                                     // uint32_t                             clearValueCount;
+               &renderPassClearValue,                                          // const VkClearValue*  pClearValues;
+       };
 
        beginCommandBuffer(*m_device, *m_cmdBuffer);
 
        beforeDraw();
 
-       beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+       cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 
        m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 
@@ -3015,10 +3277,10 @@ void MultiViewDepthStencilTestInstance::draw (const deUint32 subpassCount, VkRen
                        m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, firstVertexOffset + (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
 
                if (subpassNdx < subpassCount - 1u)
-                       m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+                       cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
        }
 
-       endRenderPass(*m_device, *m_cmdBuffer);
+       cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 
        afterDraw();
 
@@ -3370,9 +3632,7 @@ static std::vector<deUint32> tripleDepthStencilMasks(std::vector<deUint32>& base
 
 void multiViewRenderCreateTests (tcu::TestCaseGroup* group)
 {
-       tcu::TestContext&                       testCtx                                         = group->getTestContext();
        const deUint32                          testCaseCount                           = 7u;
-       MovePtr<tcu::TestCaseGroup>     groupViewIndex                          (new tcu::TestCaseGroup(testCtx, "index", "ViewIndex rendering tests."));
        const string                            shaderName[TEST_TYPE_LAST]      =
        {
                "masks",
@@ -3447,76 +3707,88 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group)
        depthStencilMasks.push_back(12u);       // 1100
        depthStencilMasks.push_back(9u);        // 1001
 
-       for (int testTypeNdx = TEST_TYPE_VIEW_MASK; testTypeNdx < TEST_TYPE_LAST; ++testTypeNdx)
+       for (int renderPassTypeNdx = 0; renderPassTypeNdx < 2; ++renderPassTypeNdx)
        {
-               MovePtr<tcu::TestCaseGroup>     groupShader                     (new tcu::TestCaseGroup(testCtx, shaderName[testTypeNdx].c_str(), ""));
-               const TestType                          testType                        = static_cast<TestType>(testTypeNdx);
-               const VkSampleCountFlagBits     sampleCountFlags        = (testType == TEST_TYPE_MULTISAMPLE) ? VK_SAMPLE_COUNT_2_BIT : VK_SAMPLE_COUNT_1_BIT;
-               const VkFormat                          colorFormat                     = (testType == TEST_TYPE_MULTISAMPLE) ? VK_FORMAT_R32G32B32A32_SFLOAT : VK_FORMAT_R8G8B8A8_UNORM;
+               RenderPassType                          renderPassType          ((renderPassTypeNdx == 0) ? RENDERPASS_TYPE_LEGACY : RENDERPASS_TYPE_RENDERPASS2);
+               MovePtr<tcu::TestCaseGroup>     groupRenderPass2        ((renderPassTypeNdx == 0) ? DE_NULL : new tcu::TestCaseGroup(group->getTestContext(), "renderpass2", "RenderPass2 index tests"));
+               tcu::TestCaseGroup*                     targetGroup                     ((renderPassTypeNdx == 0) ? group : groupRenderPass2.get());
+               tcu::TestContext&                       testCtx                         (targetGroup->getTestContext());
+               MovePtr<tcu::TestCaseGroup>     groupViewIndex          (new tcu::TestCaseGroup(testCtx, "index", "ViewIndex rendering tests."));
 
-               if (testTypeNdx == TEST_TYPE_DEPTH || testTypeNdx == TEST_TYPE_STENCIL)
+               for (int testTypeNdx = TEST_TYPE_VIEW_MASK; testTypeNdx < TEST_TYPE_LAST; ++testTypeNdx)
                {
-                       const VkExtent3D                dsTestExtent3D  = { 64u, 64u, 4u };
-                       const TestParameters    parameters              = { dsTestExtent3D, tripleDepthStencilMasks(depthStencilMasks), testType, sampleCountFlags, colorFormat };
-                       const std::string               testName                = createViewMasksName(parameters.viewMasks);
+                       MovePtr<tcu::TestCaseGroup>     groupShader                     (new tcu::TestCaseGroup(testCtx, shaderName[testTypeNdx].c_str(), ""));
+                       const TestType                          testType                        = static_cast<TestType>(testTypeNdx);
+                       const VkSampleCountFlagBits     sampleCountFlags        = (testType == TEST_TYPE_MULTISAMPLE) ? VK_SAMPLE_COUNT_2_BIT : VK_SAMPLE_COUNT_1_BIT;
+                       const VkFormat                          colorFormat                     = (testType == TEST_TYPE_MULTISAMPLE) ? VK_FORMAT_R32G32B32A32_SFLOAT : VK_FORMAT_R8G8B8A8_UNORM;
 
-                       groupShader->addChild(new MultiViewRenderTestsCase(testCtx, testName.c_str(), "", parameters));
-               }
-               else
-               {
-                       for (deUint32 testCaseNdx = 0u; testCaseNdx < testCaseCount; ++testCaseNdx)
+                       if (testTypeNdx == TEST_TYPE_DEPTH || testTypeNdx == TEST_TYPE_STENCIL)
                        {
-                               const TestParameters    parameters      =       { extent3D[testCaseNdx], viewMasks[testCaseNdx], testType, sampleCountFlags, colorFormat };
-                               const std::string               testName        =       createViewMasksName(parameters.viewMasks);
+                               const VkExtent3D                dsTestExtent3D  = { 64u, 64u, 4u };
+                               const TestParameters    parameters              = { dsTestExtent3D, tripleDepthStencilMasks(depthStencilMasks), testType, sampleCountFlags, colorFormat, renderPassType };
+                               const std::string               testName                = createViewMasksName(parameters.viewMasks);
 
                                groupShader->addChild(new MultiViewRenderTestsCase(testCtx, testName.c_str(), "", parameters));
                        }
-
-                       // maxMultiviewViewCount case
+                       else
                        {
-                               const VkExtent3D                incompleteExtent3D      = { 16u, 16u, 0u };
-                               const vector<deUint32>  dummyMasks;
-                               const TestParameters    parameters                      = { incompleteExtent3D, dummyMasks, testType, sampleCountFlags, colorFormat };
+                               for (deUint32 testCaseNdx = 0u; testCaseNdx < testCaseCount; ++testCaseNdx)
+                               {
+                                       const TestParameters    parameters      =       { extent3D[testCaseNdx], viewMasks[testCaseNdx], testType, sampleCountFlags, colorFormat, renderPassType };
+                                       const std::string               testName        =       createViewMasksName(parameters.viewMasks);
 
-                               groupShader->addChild(new MultiViewRenderTestsCase(testCtx, "max_multi_view_view_count", "", parameters));
+                                       groupShader->addChild(new MultiViewRenderTestsCase(testCtx, testName.c_str(), "", parameters));
+                               }
+
+                               // maxMultiviewViewCount case
+                               {
+                                       const VkExtent3D                incompleteExtent3D      = { 16u, 16u, 0u };
+                                       const vector<deUint32>  dummyMasks;
+                                       const TestParameters    parameters                      = { incompleteExtent3D, dummyMasks, testType, sampleCountFlags, colorFormat, renderPassType };
+
+                                       groupShader->addChild(new MultiViewRenderTestsCase(testCtx, "max_multi_view_view_count", "", parameters));
+                               }
                        }
+
+                       switch (testType)
+                       {
+                               case TEST_TYPE_VIEW_MASK:
+                               case TEST_TYPE_INPUT_ATTACHMENTS:
+                               case TEST_TYPE_INPUT_ATTACHMENTS_GEOMETRY:
+                               case TEST_TYPE_INSTANCED_RENDERING:
+                               case TEST_TYPE_INPUT_RATE_INSTANCE:
+                               case TEST_TYPE_DRAW_INDIRECT:
+                               case TEST_TYPE_DRAW_INDIRECT_INDEXED:
+                               case TEST_TYPE_DRAW_INDEXED:
+                               case TEST_TYPE_CLEAR_ATTACHMENTS:
+                               case TEST_TYPE_SECONDARY_CMD_BUFFER:
+                               case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY:
+                               case TEST_TYPE_POINT_SIZE:
+                               case TEST_TYPE_MULTISAMPLE:
+                               case TEST_TYPE_QUERIES:
+                               case TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR:
+                               case TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR:
+                               case TEST_TYPE_DEPTH:
+                               case TEST_TYPE_STENCIL:
+                                       targetGroup->addChild(groupShader.release());
+                                       break;
+                               case TEST_TYPE_VIEW_INDEX_IN_VERTEX:
+                               case TEST_TYPE_VIEW_INDEX_IN_FRAGMENT:
+                               case TEST_TYPE_VIEW_INDEX_IN_GEOMETRY:
+                               case TEST_TYPE_VIEW_INDEX_IN_TESELLATION:
+                                       groupViewIndex->addChild(groupShader.release());
+                                       break;
+                               default:
+                                       DE_ASSERT(0);
+                                       break;
+                       };
                }
 
-               switch (testType)
-               {
-                       case TEST_TYPE_VIEW_MASK:
-                       case TEST_TYPE_INPUT_ATTACHMENTS:
-                       case TEST_TYPE_INPUT_ATTACHMENTS_GEOMETRY:
-                       case TEST_TYPE_INSTANCED_RENDERING:
-                       case TEST_TYPE_INPUT_RATE_INSTANCE:
-                       case TEST_TYPE_DRAW_INDIRECT:
-                       case TEST_TYPE_DRAW_INDIRECT_INDEXED:
-                       case TEST_TYPE_DRAW_INDEXED:
-                       case TEST_TYPE_CLEAR_ATTACHMENTS:
-                       case TEST_TYPE_SECONDARY_CMD_BUFFER:
-                       case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY:
-                       case TEST_TYPE_POINT_SIZE:
-                       case TEST_TYPE_MULTISAMPLE:
-                       case TEST_TYPE_QUERIES:
-                       case TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR:
-                       case TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR:
-                       case TEST_TYPE_DEPTH:
-                       case TEST_TYPE_STENCIL:
-                               group->addChild(groupShader.release());
-                               break;
-                       case TEST_TYPE_VIEW_INDEX_IN_VERTEX:
-                       case TEST_TYPE_VIEW_INDEX_IN_FRAGMENT:
-                       case TEST_TYPE_VIEW_INDEX_IN_GEOMETRY:
-                       case TEST_TYPE_VIEW_INDEX_IN_TESELLATION:
-                               groupViewIndex->addChild(groupShader.release());
-                               break;
-                       default:
-                               DE_ASSERT(0);
-                               break;
-               };
-       }
+               targetGroup->addChild(groupViewIndex.release());
 
-       group->addChild(groupViewIndex.release());
+               if (renderPassTypeNdx == 1)
+                       group->addChild(groupRenderPass2.release());
+       }
 }
 
 } //MultiView
index acdde26..456e942 100644 (file)
@@ -22,6 +22,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vktMultiViewRenderUtil.hpp"
+#include "vktMultiViewRenderPassUtil.hpp"
 
 #include "vktTestCase.hpp"
 #include "vkBuilderUtil.hpp"
@@ -231,88 +232,115 @@ Move<VkDescriptorSetLayout> makeDescriptorSetLayout (const DeviceInterface&              vk,
        return vk::createDescriptorSetLayout(vk, device, &createInfo);
 }
 
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
 Move<VkRenderPass> makeRenderPass (const DeviceInterface&              vk,
                                                                   const VkDevice                               device,
                                                                   const VkFormat                               colorFormat,
                                                                   const vector<deUint32>&              viewMasks,
                                                                   const VkSampleCountFlagBits  samples,
                                                                   const VkAttachmentLoadOp             colorLoadOp,
-                                                                  const vk::VkFormat                   dsFormat)
+                                                                  const VkFormat                               dsFormat)
 {
        const bool                                                                      dsAttacmentAvailable            = (dsFormat != vk::VK_FORMAT_UNDEFINED);
        const deUint32                                                          subpassCount                            = static_cast<deUint32>(viewMasks.size());
-       const VkAttachmentDescription                           colorAttachmentDescription      =
-       {
-               (VkAttachmentDescriptionFlags)0,                                                                        // VkAttachmentDescriptionFlags flags;
-               colorFormat,                                                                                                            // VkFormat                                             format;
-               samples,                                                                                                                        // VkSampleCountFlagBits                samples;
-               colorLoadOp,                                                                                                            // VkAttachmentLoadOp                   loadOp;
-               VK_ATTACHMENT_STORE_OP_STORE,                                                                           // VkAttachmentStoreOp                  storeOp;
-               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                                                        // VkAttachmentLoadOp                   stencilLoadOp;
-               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                                                       // VkAttachmentStoreOp                  stencilStoreOp;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                       // VkImageLayout                                initialLayout;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                                                        // VkImageLayout                                finalLayout;
-       };
-
-       const VkAttachmentReference                                     colorAttachmentReference        =
-       {
-               0u,                                                                                                                                     // deUint32                     attachment;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                                                        // VkImageLayout        layout;
-       };
-
-       const VkAttachmentDescription                           dsAttachmentDescription =
-       {
-               (VkAttachmentDescriptionFlags)0,                                                                        // VkAttachmentDescriptionFlags flags;
-               dsFormat,                                                                                                                       // VkFormat                                             format;
-               samples,                                                                                                                        // VkSampleCountFlagBits                samples;
-               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                                                        // VkAttachmentLoadOp                   loadOp;
-               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                                                       // VkAttachmentStoreOp                  storeOp;
-               VK_ATTACHMENT_LOAD_OP_LOAD,                                                                                     // VkAttachmentLoadOp                   stencilLoadOp;
-               VK_ATTACHMENT_STORE_OP_STORE,                                                                           // VkAttachmentStoreOp                  stencilStoreOp;
-               VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,                                       // VkImageLayout                                initialLayout;
-               VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL                                        // VkImageLayout                                finalLayout;
-       };
-
-       const VkAttachmentReference                                     depthAttachmentReference        =
-       {
-               dsAttacmentAvailable ? 1u : VK_ATTACHMENT_UNUSED,                                       // deUint32                     attachment;
-               dsAttacmentAvailable ?                                                                                          // VkImageLayout        layout;
+       const AttachmentDesc                                            colorAttachmentDescription      // VkAttachmentDescription                                                                              ||  VkAttachmentDescription2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               (VkAttachmentDescriptionFlags)0,                                                                        //  VkAttachmentDescriptionFlags        flags;                                          ||  VkAttachmentDescriptionFlags                flags;
+               colorFormat,                                                                                                            //  VkFormat                                            format;                                         ||  VkFormat                                                    format;
+               samples,                                                                                                                        //  VkSampleCountFlagBits                       samples;                                        ||  VkSampleCountFlagBits                               samples;
+               colorLoadOp,                                                                                                            //  VkAttachmentLoadOp                          loadOp;                                         ||  VkAttachmentLoadOp                                  loadOp;
+               VK_ATTACHMENT_STORE_OP_STORE,                                                                           //  VkAttachmentStoreOp                         storeOp;                                        ||  VkAttachmentStoreOp                                 storeOp;
+               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                                                        //  VkAttachmentLoadOp                          stencilLoadOp;                          ||  VkAttachmentLoadOp                                  stencilLoadOp;
+               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                                                       //  VkAttachmentStoreOp                         stencilStoreOp;                         ||  VkAttachmentStoreOp                                 stencilStoreOp;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                       //  VkImageLayout                                       initialLayout;                          ||  VkImageLayout                                               initialLayout;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                                                        //  VkImageLayout                                       finalLayout;                            ||  VkImageLayout                                               finalLayout;
+       );
+
+       const AttachmentRef                                                     colorAttachmentReference        //  VkAttachmentReference                                                                               ||  VkAttachmentReference2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               0u,                                                                                                                                     //  deUint32                                            attachment;                                     ||  deUint32                                                    attachment;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                       //  VkImageLayout                                       layout;                                         ||  VkImageLayout                                               layout;
+               0u                                                                                                                                      //                                                                                                                              ||  VkImageAspectFlags                                  aspectMask;
+       );
+
+       const AttachmentDesc                                            dsAttachmentDescription         //  VkAttachmentDescription                                                                             ||  VkAttachmentDescription2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               (VkAttachmentDescriptionFlags)0,                                                                        //  VkAttachmentDescriptionFlags        flags;                                          ||  VkAttachmentDescriptionFlags                flags;
+               dsFormat,                                                                                                                       //  VkFormat                                            format;                                         ||  VkFormat                                                    format;
+               samples,                                                                                                                        //  VkSampleCountFlagBits                       samples;                                        ||  VkSampleCountFlagBits                               samples;
+               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                                                        //  VkAttachmentLoadOp                          loadOp;                                         ||  VkAttachmentLoadOp                                  loadOp;
+               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                                                       //  VkAttachmentStoreOp                         storeOp;                                        ||  VkAttachmentStoreOp                                 storeOp;
+               VK_ATTACHMENT_LOAD_OP_LOAD,                                                                                     //  VkAttachmentLoadOp                          stencilLoadOp;                          ||  VkAttachmentLoadOp                                  stencilLoadOp;
+               VK_ATTACHMENT_STORE_OP_STORE,                                                                           //  VkAttachmentStoreOp                         stencilStoreOp;                         ||  VkAttachmentStoreOp                                 stencilStoreOp;
+               VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,                                       //  VkImageLayout                                       initialLayout;                          ||  VkImageLayout                                               initialLayout;
+               VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL                                        //  VkImageLayout                                       finalLayout;                            ||  VkImageLayout                                               finalLayout;
+       );
+
+       const AttachmentRef                                                     depthAttachmentReference        //  VkAttachmentReference                                                                               ||  VkAttachmentReference2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               dsAttacmentAvailable ? 1u : VK_ATTACHMENT_UNUSED,                                       //  deUint32                                            attachment;                                     ||  deUint32                                                    attachment;
+               dsAttacmentAvailable ?                                                                                          //  VkImageLayout                                       layout;                                         ||  VkImageLayout                                               layout;
                        VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL :
-                       VK_IMAGE_LAYOUT_UNDEFINED
-       };
+                       VK_IMAGE_LAYOUT_UNDEFINED,
+               0u                                                                                                                                      //                                                                                                                              ||  VkImageAspectFlags                                  aspectMask;
+       );
 
-       const VkAttachmentDescription                           attachmentDescriptions[]        =
+       const AttachmentDesc                                            attachmentDescriptions[]        =
        {
                colorAttachmentDescription,
                dsAttachmentDescription,
        };
 
-       const VkSubpassDescription                                      subpassDescription                      =
+       DE_ASSERT((typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1)) || (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2)));
+
+       vector <SubpassDesc>                                            subpassDescriptions;
+       for (deUint32 subpassNdx = 0; subpassNdx < subpassCount; ++subpassNdx)
        {
-               (VkSubpassDescriptionFlags)0,                                                                           // VkSubpassDescriptionFlags    flags;
-               VK_PIPELINE_BIND_POINT_GRAPHICS,                                                                        // VkPipelineBindPoint                  pipelineBindPoint;
-               0u,                                                                                                                                     // deUint32                                             inputAttachmentCount;
-               DE_NULL,                                                                                                                        // const VkAttachmentReference* pInputAttachments;
-               1u,                                                                                                                                     // deUint32                                             colorAttachmentCount;
-               &colorAttachmentReference,                                                                                      // const VkAttachmentReference* pColorAttachments;
-               DE_NULL,                                                                                                                        // const VkAttachmentReference* pResolveAttachments;
-               &depthAttachmentReference,                                                                                      // const VkAttachmentReference* pDepthStencilAttachment;
-               0u,                                                                                                                                     // deUint32                                             preserveAttachmentCount;
-               DE_NULL                                                                                                                         // const deUint32*                              pPreserveAttachments;
-       };
-       vector <VkSubpassDescription>                           subpassDescriptions                     (subpassCount, subpassDescription);
+               const deUint32                                                  viewMask                                        = (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2))
+                                                                                                                                                       ? viewMasks[subpassNdx]
+                                                                                                                                                       : 0u;
+               const SubpassDesc                                               subpassDescription                      //  VkSubpassDescription                                                                                ||  VkSubpassDescription2KHR
+               (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+                       DE_NULL,                                                                                                                //                                                                                                                              ||  const void*                                                 pNext;
+                       (VkSubpassDescriptionFlags)0,                                                                   //  VkSubpassDescriptionFlags           flags;                                          ||  VkSubpassDescriptionFlags                   flags;
+                       VK_PIPELINE_BIND_POINT_GRAPHICS,                                                                //  VkPipelineBindPoint                         pipelineBindPoint;                      ||  VkPipelineBindPoint                                 pipelineBindPoint;
+                       viewMask,                                                                                                               //                                                                                                                              ||  deUint32                                                    viewMask;
+                       0u,                                                                                                                             //  deUint32                                            inputAttachmentCount;           ||  deUint32                                                    inputAttachmentCount;
+                       DE_NULL,                                                                                                                //  const VkAttachmentReference*        pInputAttachments;                      ||  const VkAttachmentReference2KHR*    pInputAttachments;
+                       1u,                                                                                                                             //  deUint32                                            colorAttachmentCount;           ||  deUint32                                                    colorAttachmentCount;
+                       &colorAttachmentReference,                                                                              //  const VkAttachmentReference*        pColorAttachments;                      ||  const VkAttachmentReference2KHR*    pColorAttachments;
+                       DE_NULL,                                                                                                                //  const VkAttachmentReference*        pResolveAttachments;            ||  const VkAttachmentReference2KHR*    pResolveAttachments;
+                       &depthAttachmentReference,                                                                              //  const VkAttachmentReference*        pDepthStencilAttachment;        ||  const VkAttachmentReference2KHR*    pDepthStencilAttachment;
+                       0u,                                                                                                                             //  deUint32                                            preserveAttachmentCount;        ||  deUint32                                                    preserveAttachmentCount;
+                       DE_NULL                                                                                                                 //  const deUint32*                                     pPreserveAttachments;           ||  const deUint32*                                             pPreserveAttachments;
+               );
+
+               subpassDescriptions.push_back(subpassDescription);
+       }
 
        const VkRenderPassMultiviewCreateInfo           renderPassMultiviewInfo         =
        {
-               VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR,                        //VkStructureType       sType;
-               DE_NULL,                                                                                                                        //const void*           pNext;
-               subpassCount,                                                                                                           //uint32_t                      subpassCount;
-               &viewMasks[0],                                                                                                          //const uint32_t*       pViewMasks;
-               0u,                                                                                                                                     //uint32_t                      dependencyCount;
-               DE_NULL,                                                                                                                        //const int32_t*        pViewOffsets;
-               0u,                                                                                                                                     //uint32_t                      correlationMaskCount;
-               DE_NULL,                                                                                                                        //const uint32_t*       pCorrelationMasks;
+               VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR,                        // VkStructureType      sType;
+               DE_NULL,                                                                                                                        // const void*          pNext;
+               subpassCount,                                                                                                           // uint32_t                     subpassCount;
+               &viewMasks[0],                                                                                                          // const uint32_t*      pViewMasks;
+               0u,                                                                                                                                     // uint32_t                     dependencyCount;
+               DE_NULL,                                                                                                                        // const int32_t*       pViewOffsets;
+               0u,                                                                                                                                     // uint32_t                     correlationMaskCount;
+               DE_NULL,                                                                                                                        // const uint32_t*      pCorrelationMasks;
        };
+       const VkRenderPassMultiviewCreateInfo*          renderPassMultiviewInfoPtr      = (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1))
+                                                                                                                                                       ? &renderPassMultiviewInfo
+                                                                                                                                                       : DE_NULL;
 
        const VkPipelineStageFlags                                      srcStageMask                            = dsAttacmentAvailable
                                                                                                                                                        ? VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
@@ -320,43 +348,91 @@ Move<VkRenderPass> makeRenderPass (const DeviceInterface&         vk,
        const VkAccessFlags                                                     srcAccessMask                           = dsAttacmentAvailable
                                                                                                                                                        ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
                                                                                                                                                        : VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
-       vector <VkSubpassDependency>                            subpassDependencies;
+       vector <SubpassDep>                                                     subpassDependencies;
        for(deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx)
        {
-               const VkSubpassDependency                               subpassDependency                       =
-               {
-                       subpassNdx,                                                                                                             // deUint32                             srcSubpass;
-                       (subpassNdx ==subpassCount - 1u) ? subpassNdx : subpassNdx+1u,  // deUint32                             dstSubpass;
-                       srcStageMask,                                                                                                   // VkPipelineStageFlags srcStageMask;
-                       VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,                                                  // VkPipelineStageFlags dstStageMask;
-                       srcAccessMask,                                                                                                  // VkAccessFlags                srcAccessMask;
-                       VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,                                                    // VkAccessFlags                dstAccessMask;
-                       VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR,                                                               // VkDependencyFlags    dependencyFlags;
-               };
+               const SubpassDep                                                subpassDependency                       //  VkSubpassDependency                                                                                 ||  VkSubpassDependency2KHR
+               (
+                                                                                                                                                       //                                                                                                                              ||      VkStructureType                                         sType;
+                       DE_NULL,                                                                                                                //                                                                                                                              ||      const void*                                                     pNext;
+                       subpassNdx,                                                                                                             //  deUint32                                            srcSubpass;                                     ||      deUint32                                                        srcSubpass;
+                       (subpassNdx == subpassCount -1u) ? subpassNdx : subpassNdx+1u,  //  deUint32                                            dstSubpass;                                     ||      deUint32                                                        dstSubpass;
+                       srcStageMask,                                                                                                   //  VkPipelineStageFlags                        srcStageMask;                           ||      VkPipelineStageFlags                            srcStageMask;
+                       VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,                                                  //  VkPipelineStageFlags                        dstStageMask;                           ||      VkPipelineStageFlags                            dstStageMask;
+                       srcAccessMask,                                                                                                  //  VkAccessFlags                                       srcAccessMask;                          ||      VkAccessFlags                                           srcAccessMask;
+                       VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,                                                    //  VkAccessFlags                                       dstAccessMask;                          ||      VkAccessFlags                                           dstAccessMask;
+                       VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR,                                                               //  VkDependencyFlags                           dependencyFlags;                        ||      VkDependencyFlags                                       dependencyFlags;
+                       0                                                                                                                               //                                                                                                                              ||      deInt32                                                         viewOffset;
+               );
                subpassDependencies.push_back(subpassDependency);
        }
 
-       const VkRenderPassCreateInfo                            renderPassInfo                          =
-       {
-               VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,                                                      // VkStructureType                                      sType;
-               &renderPassMultiviewInfo,                                                                                       // const void*                                          pNext;
-               (VkRenderPassCreateFlags)0,                                                                                     // VkRenderPassCreateFlags                      flags;
-               dsAttacmentAvailable ? 2u : 1u,                                                                         // deUint32                                                     attachmentCount;
-               attachmentDescriptions,                                                                                         // const VkAttachmentDescription*       pAttachments;
-               subpassCount,                                                                                                           // deUint32                                                     subpassCount;
-               &subpassDescriptions[0],                                                                                        // const VkSubpassDescription*          pSubpasses;
-               subpassCount,                                                                                                           // deUint32                                                     dependencyCount;
-               &subpassDependencies[0]                                                                                         // const VkSubpassDependency*           pDependencies;
-       };
-
-       return createRenderPass(vk, device, &renderPassInfo);
+       const RenderPassCreateInfo                                      renderPassInfo                          //  VkRenderPassCreateInfo                                                                              ||  VkRenderPassCreateInfo2KHR
+       (
+                                                                                                                                                       //  VkStructureType                                     sType;                                          ||  VkStructureType                                             sType;
+               renderPassMultiviewInfoPtr,                                                                                     //  const void*                                         pNext;                                          ||  const void*                                                 pNext;
+               (VkRenderPassCreateFlags)0,                                                                                     //  VkRenderPassCreateFlags                     flags;                                          ||  VkRenderPassCreateFlags                             flags;
+               dsAttacmentAvailable ? 2u : 1u,                                                                         //  deUint32                                            attachmentCount;                        ||  deUint32                                                    attachmentCount;
+               attachmentDescriptions,                                                                                         //  const VkAttachmentDescription*      pAttachments;                           ||  const VkAttachmentDescription2KHR*  pAttachments;
+               subpassCount,                                                                                                           //  deUint32                                            subpassCount;                           ||  deUint32                                                    subpassCount;
+               &subpassDescriptions[0],                                                                                        //  const VkSubpassDescription*         pSubpasses;                                     ||  const VkSubpassDescription2KHR*             pSubpasses;
+               subpassCount,                                                                                                           //  deUint32                                            dependencyCount;                        ||  deUint32                                                    dependencyCount;
+               &subpassDependencies[0],                                                                                        //  const VkSubpassDependency*          pDependencies;                          ||  const VkSubpassDependency2KHR*              pDependencies;
+               0u,                                                                                                                                     //                                                                                                                              ||  deUint32                                                    correlatedViewMaskCount;
+               DE_NULL                                                                                                                         //                                                                                                                              ||  const deUint32*                                             pCorrelatedViewMasks;
+       );
+
+       return renderPassInfo.createRenderPass(vk, device);
 }
 
-Move<VkRenderPass> makeRenderPassWithDepth (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkFormat dsFormat)
+// Instantiate function for legacy renderpass structures
+template
+Move<VkRenderPass> makeRenderPass<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>
+                                                                 (const DeviceInterface&               vk,
+                                                                  const VkDevice                               device,
+                                                                  const VkFormat                               colorFormat,
+                                                                  const vector<deUint32>&              viewMasks,
+                                                                  const VkSampleCountFlagBits  samples,
+                                                                  const VkAttachmentLoadOp             colorLoadOp,
+                                                                  const VkFormat                               dsFormat);
+
+// Instantiate function for renderpass2 structures
+template
+Move<VkRenderPass> makeRenderPass<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>
+                                                                 (const DeviceInterface&               vk,
+                                                                  const VkDevice                               device,
+                                                                  const VkFormat                               colorFormat,
+                                                                  const vector<deUint32>&              viewMasks,
+                                                                  const VkSampleCountFlagBits  samples,
+                                                                  const VkAttachmentLoadOp             colorLoadOp,
+                                                                  const VkFormat                               dsFormat);
+
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
+Move<VkRenderPass> makeRenderPassWithDepth (const DeviceInterface& vk, const VkDevice device, const VkFormat colorFormat, const vector<deUint32>& viewMasks, const VkFormat dsFormat)
 {
-       return makeRenderPass(vk, device, colorFormat, viewMasks, VK_SAMPLE_COUNT_1_BIT, VK_ATTACHMENT_LOAD_OP_CLEAR, dsFormat);
+       return makeRenderPass<AttachmentDesc, AttachmentRef, SubpassDesc, SubpassDep, RenderPassCreateInfo>(vk, device, colorFormat, viewMasks, VK_SAMPLE_COUNT_1_BIT, VK_ATTACHMENT_LOAD_OP_CLEAR, dsFormat);
 }
 
+// Instantiate function for legacy renderpass structures
+template
+Move<VkRenderPass> makeRenderPassWithDepth<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>
+                                                                                  (const DeviceInterface&              vk,
+                                                                                       const VkDevice                          device,
+                                                                                       const VkFormat                          colorFormat,
+                                                                                       const vector<deUint32>&         viewMasks,
+                                                                                       const VkFormat                          dsFormat);
+
+// Instantiate function for renderpass2 structures
+template
+Move<VkRenderPass> makeRenderPassWithDepth<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>
+                                                                                  (const DeviceInterface&              vk,
+                                                                                       const VkDevice                          device,
+                                                                                       const VkFormat                          colorFormat,
+                                                                                       const vector<deUint32>&         viewMasks,
+                                                                                       const VkFormat                          dsFormat);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
 Move<VkRenderPass> makeRenderPassWithAttachments (const DeviceInterface&       vk,
                                                                                                  const VkDevice                        device,
                                                                                                  const VkFormat                        colorFormat,
@@ -364,70 +440,95 @@ Move<VkRenderPass> makeRenderPassWithAttachments (const DeviceInterface&  vk,
 {
        const deUint32                                                          subpassCount                            = static_cast<deUint32>(viewMasks.size());
 
-       const VkAttachmentDescription                           colorAttachmentDescription      =
-       {
-               (VkAttachmentDescriptionFlags)0,                        // VkAttachmentDescriptionFlags         flags;
-               colorFormat,                                                            // VkFormat                                                     format;
-               VK_SAMPLE_COUNT_1_BIT,                                          // VkSampleCountFlagBits                        samples;
-               VK_ATTACHMENT_LOAD_OP_CLEAR,                            // VkAttachmentLoadOp                           loadOp;
-               VK_ATTACHMENT_STORE_OP_STORE,                           // VkAttachmentStoreOp                          storeOp;
-               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                        // VkAttachmentLoadOp                           stencilLoadOp;
-               VK_ATTACHMENT_STORE_OP_DONT_CARE,                       // VkAttachmentStoreOp                          stencilStoreOp;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,       // VkImageLayout                                        initialLayout;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL        // VkImageLayout                                        finalLayout;
-       };
-
-       const VkAttachmentDescription                           inputAttachmentDescription      =
-       {
-               (VkAttachmentDescriptionFlags)0,                        // VkAttachmentDescriptionFlags         flags;
-               colorFormat,                                                            // VkFormat                                                     format;
-               VK_SAMPLE_COUNT_1_BIT,                                          // VkSampleCountFlagBits                        samples;
-               VK_ATTACHMENT_LOAD_OP_LOAD,                                     // VkAttachmentLoadOp                           loadOp;
-               VK_ATTACHMENT_STORE_OP_STORE,                           // VkAttachmentStoreOp                          storeOp;
-               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                        // VkAttachmentLoadOp                           stencilLoadOp;
-               VK_ATTACHMENT_STORE_OP_DONT_CARE,                       // VkAttachmentStoreOp                          stencilStoreOp;
-               VK_IMAGE_LAYOUT_GENERAL,                                        // VkImageLayout                                        initialLayout;
-               VK_IMAGE_LAYOUT_GENERAL                                         // VkImageLayout                                        finalLayout;
-       };
-
-       vector<VkAttachmentDescription>                         attachments;
+       const AttachmentDesc                                            colorAttachmentDescription      //  VkAttachmentDescription                                                                             ||  VkAttachmentDescription2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               (VkAttachmentDescriptionFlags)0,                                                                        //  VkAttachmentDescriptionFlags        flags;                                          ||  VkAttachmentDescriptionFlags                flags;
+               colorFormat,                                                                                                            //  VkFormat                                            format;                                         ||  VkFormat                                                    format;
+               VK_SAMPLE_COUNT_1_BIT,                                                                                          //  VkSampleCountFlagBits                       samples;                                        ||  VkSampleCountFlagBits                               samples;
+               VK_ATTACHMENT_LOAD_OP_CLEAR,                                                                            //  VkAttachmentLoadOp                          loadOp;                                         ||  VkAttachmentLoadOp                                  loadOp;
+               VK_ATTACHMENT_STORE_OP_STORE,                                                                           //  VkAttachmentStoreOp                         storeOp;                                        ||  VkAttachmentStoreOp                                 storeOp;
+               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                                                        //  VkAttachmentLoadOp                          stencilLoadOp;                          ||  VkAttachmentLoadOp                                  stencilLoadOp;
+               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                                                       //  VkAttachmentStoreOp                         stencilStoreOp;                         ||  VkAttachmentStoreOp                                 stencilStoreOp;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                       //  VkImageLayout                                       initialLayout;                          ||  VkImageLayout                                               initialLayout;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                                                        //  VkImageLayout                                       finalLayout;                            ||  VkImageLayout                                               finalLayout;
+       );
+
+       const AttachmentDesc                                            inputAttachmentDescription      //  VkAttachmentDescription                                                                             ||  VkAttachmentDescription2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               (VkAttachmentDescriptionFlags)0,                                                                        //  VkAttachmentDescriptionFlags        flags;                                          ||  VkAttachmentDescriptionFlags                flags;
+               colorFormat,                                                                                                            //  VkFormat                                            format;                                         ||  VkFormat                                                    format;
+               VK_SAMPLE_COUNT_1_BIT,                                                                                          //  VkSampleCountFlagBits                       samples;                                        ||  VkSampleCountFlagBits                               samples;
+               VK_ATTACHMENT_LOAD_OP_LOAD,                                                                                     //  VkAttachmentLoadOp                          loadOp;                                         ||  VkAttachmentLoadOp                                  loadOp;
+               VK_ATTACHMENT_STORE_OP_STORE,                                                                           //  VkAttachmentStoreOp                         storeOp;                                        ||  VkAttachmentStoreOp                                 storeOp;
+               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                                                        //  VkAttachmentLoadOp                          stencilLoadOp;                          ||  VkAttachmentLoadOp                                  stencilLoadOp;
+               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                                                       //  VkAttachmentStoreOp                         stencilStoreOp;                         ||  VkAttachmentStoreOp                                 stencilStoreOp;
+               VK_IMAGE_LAYOUT_GENERAL,                                                                                        //  VkImageLayout                                       initialLayout;                          ||  VkImageLayout                                               initialLayout;
+               VK_IMAGE_LAYOUT_GENERAL                                                                                         //  VkImageLayout                                       finalLayout;                            ||  VkImageLayout                                               finalLayout;
+       );
+
+       vector<AttachmentDesc>                                          attachments;
        attachments.push_back(colorAttachmentDescription);
        attachments.push_back(inputAttachmentDescription);
 
-       const VkAttachmentReference                                     colorAttachmentReference        =
+       const AttachmentRef                                                     colorAttachmentReference        //  VkAttachmentReference                                                                               ||  VkAttachmentReference2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               0u,                                                                                                                                     //  deUint32                                            attachment;                                     ||  deUint32                                                    attachment;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                       //  VkImageLayout                                       layout;                                         ||  VkImageLayout                                               layout;
+               0u                                                                                                                                      //                                                                                                                              ||  VkImageAspectFlags                                  aspectMask;
+       );
+
+       const AttachmentRef                                                     inputAttachmentReference        //  VkAttachmentReference                                                                               ||  VkAttachmentReference2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               1u,                                                                                                                                     //  deUint32                                            attachment;                                     ||  deUint32                                                    attachment;
+               VK_IMAGE_LAYOUT_GENERAL,                                                                                        //  VkImageLayout                                       layout;                                         ||  VkImageLayout                                               layout;
+               0u                                                                                                                                      //                                                                                                                              ||  VkImageAspectFlags                                  aspectMask;
+       );
+
+       const AttachmentRef                                                     depthAttachmentReference        //  VkAttachmentReference                                                                               ||  VkAttachmentReference2KHR
+       (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //                                                                                                                              ||  const void*                                                 pNext;
+               VK_ATTACHMENT_UNUSED,                                                                                           //  deUint32                                            attachment;                                     ||  deUint32                                                    attachment;
+               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                      //  VkImageLayout                                       layout;                                         ||  VkImageLayout                                               layout;
+               0u                                                                                                                                      //                                                                                                                              ||  VkImageAspectFlags                                  aspectMask;
+       );
+
+       DE_ASSERT((typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1)) || (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2)));
+
+       vector <SubpassDesc>                                            subpassDescriptions;
+       for (deUint32 subpassNdx = 0; subpassNdx < subpassCount; ++subpassNdx)
        {
-               0u,                                                                                     // deUint32                     attachment;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL        // VkImageLayout        layout;
-       };
-
-       const VkAttachmentReference                                     inputAttachmentReference        =
-       {
-               1u,                                             // deUint32                     attachment;
-               VK_IMAGE_LAYOUT_GENERAL // VkImageLayout        layout;
-       };
-
-       const VkAttachmentReference                                     depthAttachmentReference        =
-       {
-               VK_ATTACHMENT_UNUSED,           // deUint32                     attachment;
-               VK_IMAGE_LAYOUT_UNDEFINED       // VkImageLayout        layout;
-       };
-
-       const VkSubpassDescription                                      subpassDescription                      =
-       {
-               (VkSubpassDescriptionFlags)0,           // VkSubpassDescriptionFlags            flags;
-               VK_PIPELINE_BIND_POINT_GRAPHICS,        // VkPipelineBindPoint                          pipelineBindPoint;
-               1u,                                                                     // deUint32                                                     inputAttachmentCount;
-               &inputAttachmentReference,                      // const VkAttachmentReference*         pInputAttachments;
-               1u,                                                                     // deUint32                                                     colorAttachmentCount;
-               &colorAttachmentReference,                      // const VkAttachmentReference*         pColorAttachments;
-               DE_NULL,                                                        // const VkAttachmentReference*         pResolveAttachments;
-               &depthAttachmentReference,                      // const VkAttachmentReference*         pDepthStencilAttachment;
-               0u,                                                                     // deUint32                                                     preserveAttachmentCount;
-               DE_NULL                                                         // const deUint32*                                      pPreserveAttachments;
-       };
-       vector <VkSubpassDescription>                           subpassDescriptions                     (subpassCount, subpassDescription);
+               const deUint32                                                  viewMask                                        = (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2))
+                                                                                                                                                       ? viewMasks[subpassNdx]
+                                                                                                                                                       : 0u;
+               const SubpassDesc                                               subpassDescription                      //  VkSubpassDescription                                                                                ||  VkSubpassDescription2KHR
+               (
+                                                                                                                                                       //                                                                                                                              ||  VkStructureType                                             sType;
+                       DE_NULL,                                                                                                                //                                                                                                                              ||  const void*                                                 pNext;
+                       (VkSubpassDescriptionFlags)0,                                                                   // VkSubpassDescriptionFlags            flags;                                          ||  VkSubpassDescriptionFlags                   flags;
+                       VK_PIPELINE_BIND_POINT_GRAPHICS,                                                                // VkPipelineBindPoint                          pipelineBindPoint;                      ||  VkPipelineBindPoint                                 pipelineBindPoint;
+                       viewMask,                                                                                                               //                                                                                                                              ||  deUint32                                                    viewMask;
+                       1u,                                                                                                                             // deUint32                                                     inputAttachmentCount;           ||  deUint32                                                    inputAttachmentCount;
+                       &inputAttachmentReference,                                                                              // const VkAttachmentReference*         pInputAttachments;                      ||  const VkAttachmentReference2KHR*    pInputAttachments;
+                       1u,                                                                                                                             // deUint32                                                     colorAttachmentCount;           ||  deUint32                                                    colorAttachmentCount;
+                       &colorAttachmentReference,                                                                              // const VkAttachmentReference*         pColorAttachments;                      ||  const VkAttachmentReference2KHR*    pColorAttachments;
+                       DE_NULL,                                                                                                                // const VkAttachmentReference*         pResolveAttachments;            ||  const VkAttachmentReference2KHR*    pResolveAttachments;
+                       &depthAttachmentReference,                                                                              // const VkAttachmentReference*         pDepthStencilAttachment;        ||  const VkAttachmentReference2KHR*    pDepthStencilAttachment;
+                       0u,                                                                                                                             // deUint32                                                     preserveAttachmentCount;        ||  deUint32                                                    preserveAttachmentCount;
+                       DE_NULL                                                                                                                 // const deUint32*                                      pPreserveAttachments;           ||  const deUint32*                                             pPreserveAttachments;
+               );
+               subpassDescriptions.push_back(subpassDescription);
+       }
 
-       const VkRenderPassMultiviewCreateInfo   renderPassMultiviewInfo         =
+       const VkRenderPassMultiviewCreateInfo           renderPassMultiviewInfo         =
        {
                VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR,        //VkStructureType       sType;
                DE_NULL,                                                                                                        //const void*           pNext;
@@ -438,39 +539,63 @@ Move<VkRenderPass> makeRenderPassWithAttachments (const DeviceInterface&  vk,
                0u,                                                                                                                     //uint32_t                      correlationMaskCount;
                DE_NULL,                                                                                                        //const uint32_t*       pCorrelationMasks;
        };
+       const VkRenderPassMultiviewCreateInfo*          renderPassMultiviewInfoPtr      = typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1)
+                                                                                                                                                       ? &renderPassMultiviewInfo
+                                                                                                                                                       : DE_NULL;
 
-       vector <VkSubpassDependency>                            subpassDependencies;
+       vector <SubpassDep>                                                     subpassDependencies;
        for(deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx)
        {
-               const VkSubpassDependency subpassDependency =
-               {
-                       subpassNdx,                                                                                                             // deUint32                             srcSubpass;
-                       (subpassNdx ==subpassCount - 1u) ? subpassNdx : subpassNdx+1u,  // deUint32                             dstSubpass;
-                       VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,                                  // VkPipelineStageFlags srcStageMask;
-                       VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,                                                  // VkPipelineStageFlags dstStageMask;
-                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                   // VkAccessFlags                srcAccessMask;
-                       VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,                                                    // VkAccessFlags                dstAccessMask;
-                       VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR,                                                               // VkDependencyFlags    dependencyFlags;
-               };
+               const SubpassDep                                                subpassDependency                       //  VkSubpassDependency                                                                                 ||  VkSubpassDependency2KHR
+               (
+                                                                                                                                                       //                                                                                                                              ||      VkStructureType                                         sType;
+                       DE_NULL,                                                                                                                //                                                                                                                              ||      const void*                                                     pNext;
+                       subpassNdx,                                                                                                             //  deUint32                                            srcSubpass;                                     ||      deUint32                                                        srcSubpass;
+                       (subpassNdx == subpassCount -1u) ? subpassNdx : subpassNdx+1u,  //  deUint32                                            dstSubpass;                                     ||      deUint32                                                        dstSubpass;
+                       VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,                                  //  VkPipelineStageFlags                        srcStageMask;                           ||      VkPipelineStageFlags                            srcStageMask;
+                       VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,                                                  //  VkPipelineStageFlags                        dstStageMask;                           ||      VkPipelineStageFlags                            dstStageMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                   //  VkAccessFlags                                       srcAccessMask;                          ||      VkAccessFlags                                           srcAccessMask;
+                       VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,                                                    //  VkAccessFlags                                       dstAccessMask;                          ||      VkAccessFlags                                           dstAccessMask;
+                       VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR,                                                               //  VkDependencyFlags                           dependencyFlags;                        ||      VkDependencyFlags                                       dependencyFlags;
+                       0                                                                                                                               //                                                                                                                              ||      deInt32                                                         viewOffset;
+               );
                subpassDependencies.push_back(subpassDependency);
        }
 
-       const VkRenderPassCreateInfo                            renderPassInfo          =
-       {
-               VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,      // VkStructureType                                      sType;
-               &renderPassMultiviewInfo,                                       // const void*                                          pNext;
-               (VkRenderPassCreateFlags)0,                                     // VkRenderPassCreateFlags                      flags;
-               2u,                                                                                     // deUint32                                                     attachmentCount;
-               &attachments[0],                                                        // const VkAttachmentDescription*       pAttachments;
-               subpassCount,                                                           // deUint32                                                     subpassCount;
-               &subpassDescriptions[0],                                        // const VkSubpassDescription*          pSubpasses;
-               subpassCount,                                                           // deUint32                                                     dependencyCount;
-               &subpassDependencies[0]                                         // const VkSubpassDependency*           pDependencies;
-       };
-
-       return createRenderPass(vk, device, &renderPassInfo);
+       const RenderPassCreateInfo                                      renderPassInfo                          //  VkRenderPassCreateInfo                                                                              ||  VkRenderPassCreateInfo2KHR
+       (
+                                                                                                                                                       //  VkStructureType                                     sType;                                          ||  VkStructureType                                             sType;
+               renderPassMultiviewInfoPtr,                                                                                     //  const void*                                         pNext;                                          ||  const void*                                                 pNext;
+               (VkRenderPassCreateFlags)0,                                                                                     //  VkRenderPassCreateFlags                     flags;                                          ||  VkRenderPassCreateFlags                             flags;
+               2u,                                                                                                                                     //  deUint32                                            attachmentCount;                        ||  deUint32                                                    attachmentCount;
+               &attachments[0],                                                                                                        //  const VkAttachmentDescription*      pAttachments;                           ||  const VkAttachmentDescription2KHR*  pAttachments;
+               subpassCount,                                                                                                           //  deUint32                                            subpassCount;                           ||  deUint32                                                    subpassCount;
+               &subpassDescriptions[0],                                                                                        //  const VkSubpassDescription*         pSubpasses;                                     ||  const VkSubpassDescription2KHR*             pSubpasses;
+               subpassCount,                                                                                                           //  deUint32                                            dependencyCount;                        ||  deUint32                                                    dependencyCount;
+               &subpassDependencies[0],                                                                                        //  const VkSubpassDependency*          pDependencies;                          ||  const VkSubpassDependency2KHR*              pDependencies;
+               0u,                                                                                                                                     //                                                                                                                              ||  deUint32                                                    correlatedViewMaskCount;
+               DE_NULL                                                                                                                         //                                                                                                                              ||  const deUint32*                                             pCorrelatedViewMasks;
+       );
+
+       return renderPassInfo.createRenderPass(vk, device);
 }
 
+// Instantiate function for legacy renderpass structures
+template
+Move<VkRenderPass> makeRenderPassWithAttachments<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>
+                                                                                                (const DeviceInterface&        vk,
+                                                                                                 const VkDevice                        device,
+                                                                                                 const VkFormat                        colorFormat,
+                                                                                                 const vector<deUint32>&       viewMasks);
+
+// Instantiate function for renderpass2 structures
+template
+Move<VkRenderPass> makeRenderPassWithAttachments<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>
+                                                                                                (const DeviceInterface&        vk,
+                                                                                                 const VkDevice                        device,
+                                                                                                 const VkFormat                        colorFormat,
+                                                                                                 const vector<deUint32>&       viewMasks);
+
 void beginSecondaryCommandBuffer (const DeviceInterface&                               vk,
                                                                   const VkCommandBuffer                                commandBuffer,
                                                                   const VkRenderPass                                   renderPass,
index 449b439..b2a767c 100644 (file)
@@ -41,9 +41,16 @@ vk::Move<vk::VkImageView>                    makeImageView                                   (const vk::DeviceInterface& vk, co
 vk::Move<vk::VkFramebuffer>                    makeFramebuffer                                 (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkRenderPass renderPass, const std::vector<vk::VkImageView>& attachments, const deUint32 width, const deUint32 height, const deUint32 layers);
 vk::Move<vk::VkPipelineLayout>         makePipelineLayout                              (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorSetLayout* pSetLayouts = DE_NULL);
 vk::Move<vk::VkDescriptorSetLayout>    makeDescriptorSetLayout                 (const vk::DeviceInterface& vk, const vk::VkDevice device);
-vk::Move<vk::VkRenderPass>                     makeRenderPass                                  (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkSampleCountFlagBits samples = vk::VK_SAMPLE_COUNT_1_BIT, const vk::VkAttachmentLoadOp colorLoadOp = vk::VK_ATTACHMENT_LOAD_OP_CLEAR, const vk::VkFormat dsFormat = vk::VK_FORMAT_UNDEFINED);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
+vk::Move<vk::VkRenderPass>                     makeRenderPass                                  (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkSampleCountFlagBits samples, const vk::VkAttachmentLoadOp colorLoadOp, const vk::VkFormat dsFormat);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
 vk::Move<vk::VkRenderPass>                     makeRenderPassWithAttachments   (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
 vk::Move<vk::VkRenderPass>                     makeRenderPassWithDepth                 (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkFormat dsFormat);
+
 void                                                           beginSecondaryCommandBuffer             (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer, const vk::VkRenderPass renderPass, const deUint32 subpass, const vk::VkFramebuffer framebuffer);
 void                                                           imageBarrier                                    (const vk::DeviceInterface& vk, const vk::VkCommandBuffer cmdBuffer, const vk::VkImage image, const vk::VkImageSubresourceRange subresourceRange, const vk::VkImageLayout oldLayout, const vk::VkImageLayout newLayout, const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkPipelineStageFlags srcStageMask = vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, const vk::VkPipelineStageFlags dstStageMask = vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
 
index b7e5f6b..30df619 100644 (file)
@@ -301563,6 +301563,168 @@ dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
 dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.masks.15
+dEQP-VK.multiview.renderpass2.masks.8
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8
+dEQP-VK.multiview.renderpass2.masks.15_15_15_15
+dEQP-VK.multiview.renderpass2.masks.8_1_1_8
+dEQP-VK.multiview.renderpass2.masks.5_10_5_10
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.masks.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments.15
+dEQP-VK.multiview.renderpass2.input_attachments.8
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.instanced.15
+dEQP-VK.multiview.renderpass2.instanced.8
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8
+dEQP-VK.multiview.renderpass2.instanced.15_15_15_15
+dEQP-VK.multiview.renderpass2.instanced.8_1_1_8
+dEQP-VK.multiview.renderpass2.instanced.5_10_5_10
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.instanced.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_instance.15
+dEQP-VK.multiview.renderpass2.input_instance.8
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_instance.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_instance.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_instance.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_instance.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect.15
+dEQP-VK.multiview.renderpass2.draw_indirect.8
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.clear_attachments.15
+dEQP-VK.multiview.renderpass2.clear_attachments.8
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.clear_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.clear_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.clear_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.clear_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.point_size.15
+dEQP-VK.multiview.renderpass2.point_size.8
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8
+dEQP-VK.multiview.renderpass2.point_size.15_15_15_15
+dEQP-VK.multiview.renderpass2.point_size.8_1_1_8
+dEQP-VK.multiview.renderpass2.point_size.5_10_5_10
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.point_size.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.multisample.15
+dEQP-VK.multiview.renderpass2.multisample.8
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8
+dEQP-VK.multiview.renderpass2.multisample.15_15_15_15
+dEQP-VK.multiview.renderpass2.multisample.8_1_1_8
+dEQP-VK.multiview.renderpass2.multisample.5_10_5_10
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.multisample.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.queries.15
+dEQP-VK.multiview.renderpass2.queries.8
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8
+dEQP-VK.multiview.renderpass2.queries.15_15_15_15
+dEQP-VK.multiview.renderpass2.queries.8_1_1_8
+dEQP-VK.multiview.renderpass2.queries.5_10_5_10
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.queries.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.depth.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.stencil.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.vertex_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
 dEQP-VK.subgroups.builtin_var.subgroupsize_graphic
 dEQP-VK.subgroups.builtin_var.subgroupsize_compute
 dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer
index 82a09c9..1622126 100644 (file)
@@ -301524,6 +301524,168 @@ dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
 dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.masks.15
+dEQP-VK.multiview.renderpass2.masks.8
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8
+dEQP-VK.multiview.renderpass2.masks.15_15_15_15
+dEQP-VK.multiview.renderpass2.masks.8_1_1_8
+dEQP-VK.multiview.renderpass2.masks.5_10_5_10
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.masks.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments.15
+dEQP-VK.multiview.renderpass2.input_attachments.8
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.instanced.15
+dEQP-VK.multiview.renderpass2.instanced.8
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8
+dEQP-VK.multiview.renderpass2.instanced.15_15_15_15
+dEQP-VK.multiview.renderpass2.instanced.8_1_1_8
+dEQP-VK.multiview.renderpass2.instanced.5_10_5_10
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.instanced.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_instance.15
+dEQP-VK.multiview.renderpass2.input_instance.8
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_instance.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_instance.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_instance.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_instance.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect.15
+dEQP-VK.multiview.renderpass2.draw_indirect.8
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.clear_attachments.15
+dEQP-VK.multiview.renderpass2.clear_attachments.8
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.clear_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.clear_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.clear_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.clear_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.point_size.15
+dEQP-VK.multiview.renderpass2.point_size.8
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8
+dEQP-VK.multiview.renderpass2.point_size.15_15_15_15
+dEQP-VK.multiview.renderpass2.point_size.8_1_1_8
+dEQP-VK.multiview.renderpass2.point_size.5_10_5_10
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.point_size.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.multisample.15
+dEQP-VK.multiview.renderpass2.multisample.8
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8
+dEQP-VK.multiview.renderpass2.multisample.15_15_15_15
+dEQP-VK.multiview.renderpass2.multisample.8_1_1_8
+dEQP-VK.multiview.renderpass2.multisample.5_10_5_10
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.multisample.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.queries.15
+dEQP-VK.multiview.renderpass2.queries.8
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8
+dEQP-VK.multiview.renderpass2.queries.15_15_15_15
+dEQP-VK.multiview.renderpass2.queries.8_1_1_8
+dEQP-VK.multiview.renderpass2.queries.5_10_5_10
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.queries.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.depth.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.stencil.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.vertex_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
 dEQP-VK.subgroups.builtin_var.subgroupsize_graphic
 dEQP-VK.subgroups.builtin_var.subgroupsize_compute
 dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer