Merge vk-gl-cts/vulkan-cts-1.2.7 into vk-gl-cts/vulkan-cts-1.2.8
authorMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 3 Jun 2022 15:45:00 +0000 (08:45 -0700)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 3 Jun 2022 19:09:57 +0000 (12:09 -0700)
Change-Id: Id52b20aa498ddcc1b9dc05b7415b8d67259e2043

1  2 
android/cts/master/src/vk-master-2019-03-01.txt
android/cts/master/vk-master/image.txt
external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
external/vulkancts/modules/vulkan/draw/vktDrawConcurrentTests.cpp
external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp
external/vulkancts/modules/vulkan/image/vktImageCompressionTranscodingSupport.cpp
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp
external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp
external/vulkancts/mustpass/master/vk-default/image.txt
modules/gles3/functional/es3fShaderOperatorTests.cpp

@@@ -1418,196 -1409,193 +1418,196 @@@ tcu::TestStatus FSRTestInstance::iterat
                                attachments.push_back(*dsImageView);
                        }
  
 -                      const vk::VkAttachmentReference2 colorAttachmentReference =
 +                      if (!m_data.useDynamicRendering)
                        {
 -                              VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,                                       // sType
 -                              DE_NULL,                                                                                                        // pNext
 -                              0,                                                                                                                      // attachment
 -                              vk::VK_IMAGE_LAYOUT_GENERAL,                                                            // layout
 -                              0,                                                                                                                      // aspectMask
 -                      };
 -
 -                      const vk::VkAttachmentReference2 fragmentShadingRateAttachment =
 -                      {
 -                              VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,                                       // sType
 -                              DE_NULL,                                                                                                        // pNext
 -                              srAttachmentIdx,                                                                                        // attachment
 -                              srLayout,                                                                                                       // layout
 -                              0,                                                                                                                      // aspectMask
 -                      };
 -
 -                      const vk::VkAttachmentReference2 depthAttachmentReference =
 -                      {
 -                              VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,                                       // sType
 -                              DE_NULL,                                                                                                        // pNext
 -                              dsAttachmentIdx,                                                                                        // attachment
 -                              vk::VK_IMAGE_LAYOUT_GENERAL,                                                            // layout
 -                              0,                                                                                                                      // aspectMask
 -                      };
 -
 -                      const bool                                                                              noAttachmentPtr                         = (m_data.attachmentUsage == AttachmentUsage::NO_ATTACHMENT_PTR);
 -                      const VkFragmentShadingRateAttachmentInfoKHR    shadingRateAttachmentInfo       =
 -                      {
 -                              VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR,                                                    // VkStructureType                                sType;
 -                              DE_NULL,                                                                                                                                                                // const void*                                    pNext;
 -                              (noAttachmentPtr ? nullptr : &fragmentShadingRateAttachment),                                                   // const VkAttachmentReference2*        pFragmentShadingRateAttachment;
 -                              { srTexelWidth, srTexelHeight },                                                                                                                // VkExtent2D                                      shadingRateAttachmentTexelSize;
 -                      };
 +                              const vk::VkAttachmentReference2 colorAttachmentReference
 +                              {
 +                                      VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,                                       // sType
 +                                      DE_NULL,                                                                                                        // pNext
 +                                      0,                                                                                                                      // attachment
 +                                      vk::VK_IMAGE_LAYOUT_GENERAL,                                                            // layout
 +                                      0,                                                                                                                      // aspectMask
 +                              };
  
 -                      const bool                                              useAttachmentInfo       = (m_data.attachmentUsage != AttachmentUsage::NO_ATTACHMENT);
 -                      const VkSubpassDescription2             subpassDesc                     =
 -                      {
 -                              VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,                                                // sType
 -                              (useAttachmentInfo ? &shadingRateAttachmentInfo : nullptr),             // pNext;
 -                              (vk::VkSubpassDescriptionFlags)0,                                                               // flags
 -                              vk::VK_PIPELINE_BIND_POINT_GRAPHICS,                                                    // pipelineBindPoint
 -                              m_data.multiView ? 0x3 : 0u,                                                                    // viewMask
 -                              0u,                                                                                                                             // inputCount
 -                              DE_NULL,                                                                                                                // pInputAttachments
 -                              1,                                                                                                                              // colorCount
 -                              &colorAttachmentReference,                                                                              // pColorAttachments
 -                              DE_NULL,                                                                                                                // pResolveAttachments
 -                              m_data.useDepthStencil ? &depthAttachmentReference : DE_NULL,   // depthStencilAttachment
 -                              0u,                                                                                                                             // preserveCount
 -                              DE_NULL,                                                                                                                // pPreserveAttachments
 -                      };
 +                              const vk::VkAttachmentReference2 fragmentShadingRateAttachment =
 +                              {
 +                                      VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,                                       // sType
 +                                      DE_NULL,                                                                                                        // pNext
 +                                      srAttachmentIdx,                                                                                        // attachment
 +                                      srLayout,                                                                                                       // layout
 +                                      0,                                                                                                                      // aspectMask
 +                              };
  
 -                      std::vector<VkAttachmentDescription2> attachmentDescriptions;
 -                      attachmentDescriptions.push_back(
 +                              const vk::VkAttachmentReference2 depthAttachmentReference =
                                {
 -                                      VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,     // VkStructureType sType;
 -                                      DE_NULL,                                                                        // const void* pNext;
 -                                      (VkAttachmentDescriptionFlags)0u,                       // VkAttachmentDescriptionFlags         flags;
 -                                      cbFormat,                                                                       // VkFormat                                                     format;
 -                                      m_data.samples,                                                         // 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;
 -                              }
 -                      );
 -                      if (m_data.useAttachment())
 -                              attachmentDescriptions.push_back(
 +                                      VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,                                       // sType
 +                                      DE_NULL,                                                                                                        // pNext
 +                                      dsAttachmentIdx,                                                                                        // attachment
 +                                      vk::VK_IMAGE_LAYOUT_GENERAL,                                                            // layout
 +                                      0,                                                                                                                      // aspectMask
 +                              };
 +
 +                              const bool                                                                              noAttachmentPtr                         = (m_data.attachmentUsage == AttachmentUsage::NO_ATTACHMENT_PTR);
 +                              const VkFragmentShadingRateAttachmentInfoKHR    shadingRateAttachmentInfo       =
                                {
 -                                      VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,     // VkStructureType sType;
 -                                      DE_NULL,                                                                        // const void* pNext;
 -                                      (VkAttachmentDescriptionFlags)0u,                       // VkAttachmentDescriptionFlags         flags;
 -                                      srFormat,                                                                       // 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;
 -                                      srLayout,                                                                       // VkImageLayout                                        initialLayout;
 -                                      srLayout                                                                        // VkImageLayout                                        finalLayout;
 -                              }
 -                              );
 +                                      VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR,                                                    // VkStructureType                                sType;
 +                                      DE_NULL,                                                                                                                                                                // const void*                                    pNext;
 +                                      (noAttachmentPtr ? nullptr : &fragmentShadingRateAttachment),                                                   // const VkAttachmentReference2*        pFragmentShadingRateAttachment;
 +                                      { srTexelWidth, srTexelHeight },                                                                                                                // VkExtent2D                                      shadingRateAttachmentTexelSize;
 +                              };
  
 -                      if (m_data.useDepthStencil)
 -                              attachmentDescriptions.push_back(
 +                              const bool                                              useAttachmentInfo       = (m_data.attachmentUsage != AttachmentUsage::NO_ATTACHMENT);
 +                              const VkSubpassDescription2             subpassDesc                     =
                                {
 -                                      VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,     // VkStructureType sType;
 -                                      DE_NULL,                                                                        // const void* pNext;
 -                                      (VkAttachmentDescriptionFlags)0u,                       // VkAttachmentDescriptionFlags         flags;
 -                                      dsFormat,                                                                       // VkFormat                                                     format;
 -                                      m_data.samples,                                                         // VkSampleCountFlagBits                        samples;
 -                                      VK_ATTACHMENT_LOAD_OP_LOAD,                                     // VkAttachmentLoadOp                           loadOp;
 -                                      VK_ATTACHMENT_STORE_OP_STORE,                           // VkAttachmentStoreOp                          storeOp;
 -                                      VK_ATTACHMENT_LOAD_OP_LOAD,                                     // VkAttachmentLoadOp                           stencilLoadOp;
 -                                      VK_ATTACHMENT_STORE_OP_STORE,                           // VkAttachmentStoreOp                          stencilStoreOp;
 -                                      VK_IMAGE_LAYOUT_GENERAL,                                        // VkImageLayout                                        initialLayout;
 -                                      VK_IMAGE_LAYOUT_GENERAL                                         // VkImageLayout                                        finalLayout;
 -                              }
 -                              );
 +                                      VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,                                                // sType
 +                                      (useAttachmentInfo ? &shadingRateAttachmentInfo : nullptr),             // pNext;
 +                                      (vk::VkSubpassDescriptionFlags)0,                                                               // flags
 +                                      vk::VK_PIPELINE_BIND_POINT_GRAPHICS,                                                    // pipelineBindPoint
 +                                      m_data.multiView ? 0x3 : 0u,                                                                    // viewMask
 +                                      0u,                                                                                                                             // inputCount
 +                                      DE_NULL,                                                                                                                // pInputAttachments
 +                                      1,                                                                                                                              // colorCount
 +                                      &colorAttachmentReference,                                                                              // pColorAttachments
 +                                      DE_NULL,                                                                                                                // pResolveAttachments
 +                                      m_data.useDepthStencil ? &depthAttachmentReference : DE_NULL,   // depthStencilAttachment
 +                                      0u,                                                                                                                             // preserveCount
 +                                      DE_NULL,                                                                                                                // pPreserveAttachments
 +                              };
  
 -                      const VkRenderPassCreateInfo2   renderPassParams        =
 -                      {
 -                              VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,                    // sType
 -                              DE_NULL,                                                                                                // pNext
 -                              (vk::VkRenderPassCreateFlags)0,
 -                              (deUint32)attachmentDescriptions.size(),                                // attachmentCount
 -                              &attachmentDescriptions[0],                                                             // pAttachments
 -                              1u,                                                                                                             // subpassCount
 -                              &subpassDesc,                                                                                   // pSubpasses
 -                              0u,                                                                                                             // dependencyCount
 -                              DE_NULL,                                                                                                // pDependencies
 -                              0u,                                                                                                             // correlatedViewMaskCount
 -                              DE_NULL,                                                                                                // pCorrelatedViewMasks
 -                      };
 +                              std::vector<VkAttachmentDescription2> attachmentDescriptions
 +                              {
 +                                      {
 +                                              VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,     // VkStructureType sType;
 +                                              DE_NULL,                                                                        // const void* pNext;
 +                                              (VkAttachmentDescriptionFlags)0u,                       // VkAttachmentDescriptionFlags         flags;
-                                               VK_FORMAT_R32G32B32A32_UINT,                            // VkFormat                                                     format;
++                                              cbFormat,                                       // VkFormat                                                     format;
 +                                              m_data.samples,                                                         // 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;
 +                                      }
 +                              };
 +                              if (m_data.useAttachment())
 +                                      attachmentDescriptions.push_back(
 +                                      {
 +                                              VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,     // VkStructureType sType;
 +                                              DE_NULL,                                                                        // const void* pNext;
 +                                              (VkAttachmentDescriptionFlags)0u,                       // VkAttachmentDescriptionFlags         flags;
 +                                              srFormat,                                                                       // 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;
 +                                              srLayout,                                                                       // VkImageLayout                                        initialLayout;
 +                                              srLayout                                                                        // VkImageLayout                                        finalLayout;
 +                                      }
 +                                      );
  
 -                      renderPass = createRenderPass2(vk, device, &renderPassParams);
 +                              if (m_data.useDepthStencil)
 +                                      attachmentDescriptions.push_back(
 +                                      {
 +                                              VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,     // VkStructureType sType;
 +                                              DE_NULL,                                                                        // const void* pNext;
 +                                              (VkAttachmentDescriptionFlags)0u,                       // VkAttachmentDescriptionFlags         flags;
-                                               VK_FORMAT_D32_SFLOAT_S8_UINT,                           // VkFormat                                                     format;
++                                              dsFormat,                                       // VkFormat                                                     format;
 +                                              m_data.samples,                                                         // VkSampleCountFlagBits                        samples;
 +                                              VK_ATTACHMENT_LOAD_OP_LOAD,                                     // VkAttachmentLoadOp                           loadOp;
 +                                              VK_ATTACHMENT_STORE_OP_STORE,                           // VkAttachmentStoreOp                          storeOp;
 +                                              VK_ATTACHMENT_LOAD_OP_LOAD,                                     // VkAttachmentLoadOp                           stencilLoadOp;
 +                                              VK_ATTACHMENT_STORE_OP_STORE,                           // VkAttachmentStoreOp                          stencilStoreOp;
 +                                              VK_IMAGE_LAYOUT_GENERAL,                                        // VkImageLayout                                        initialLayout;
 +                                              VK_IMAGE_LAYOUT_GENERAL                                         // VkImageLayout                                        finalLayout;
 +                                      }
 +                                      );
  
 -                      std::vector<VkFramebufferAttachmentImageInfo> framebufferAttachmentImageInfo;
 -                      framebufferAttachmentImageInfo.push_back(
 -                              {
 -                                      VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,            //  VkStructureType             sType;
 -                                      DE_NULL,                                                                                                        //  const void*                 pNext;
 -                                      (VkImageCreateFlags)0u,                                                                         //  VkImageCreateFlags  flags;
 -                                      cbUsage,                                                                                                        //  VkImageUsageFlags   usage;
 -                                      m_data.framebufferDim.width,                                                            //  deUint32                    width;
 -                                      m_data.framebufferDim.height,                                                           //  deUint32                    height;
 -                                      m_data.numColorLayers,                                                                          //  deUint32                    layerCount;
 -                                      1u,                                                                                                                     //  deUint32                    viewFormatCount;
 -                                      &cbFormat,                                                                                                      //  const VkFormat*             pViewFormats;
 -                              }
 -                      );
 -                      if (m_data.useAttachment())
 -                              framebufferAttachmentImageInfo.push_back(
 +                              const VkRenderPassCreateInfo2   renderPassParams        =
                                {
 -                                      VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,            //  VkStructureType             sType;
 -                                      DE_NULL,                                                                                                        //  const void*                 pNext;
 -                                      (VkImageCreateFlags)0u,                                                                         //  VkImageCreateFlags  flags;
 -                                      srUsage,                                                                                                        //  VkImageUsageFlags   usage;
 -                                      srWidth,                                                                                                        //  deUint32                    width;
 -                                      srHeight,                                                                                                       //  deUint32                    height;
 -                                      numSRLayers,                                                                                            //  deUint32                    layerCount;
 -                                      1u,                                                                                                                     //  deUint32                    viewFormatCount;
 -                                      &srFormat,                                                                                                      //  const VkFormat*             pViewFormats;
 -                              }
 -                              );
 +                                      VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,                    // sType
 +                                      DE_NULL,                                                                                                // pNext
 +                                      (vk::VkRenderPassCreateFlags)0,
 +                                      (deUint32)attachmentDescriptions.size(),                                // attachmentCount
 +                                      &attachmentDescriptions[0],                                                             // pAttachments
 +                                      1u,                                                                                                             // subpassCount
 +                                      &subpassDesc,                                                                                   // pSubpasses
 +                                      0u,                                                                                                             // dependencyCount
 +                                      DE_NULL,                                                                                                // pDependencies
 +                                      0u,                                                                                                             // correlatedViewMaskCount
 +                                      DE_NULL,                                                                                                // pCorrelatedViewMasks
 +                              };
  
 -                      if (m_data.useDepthStencil)
 +                              renderPass = createRenderPass2(vk, device, &renderPassParams);
 +
 +                              std::vector<VkFramebufferAttachmentImageInfo> framebufferAttachmentImageInfo;
                                framebufferAttachmentImageInfo.push_back(
 -                              {
 -                                      VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,            //  VkStructureType             sType;
 -                                      DE_NULL,                                                                                                        //  const void*                 pNext;
 -                                      (VkImageCreateFlags)0u,                                                                         //  VkImageCreateFlags  flags;
 -                                      dsUsage,                                                                                                        //  VkImageUsageFlags   usage;
 -                                      m_data.framebufferDim.width,                                                            //  deUint32                    width;
 -                                      m_data.framebufferDim.height,                                                           //  deUint32                    height;
 -                                      m_data.numColorLayers,                                                                          //  deUint32                    layerCount;
 -                                      1u,                                                                                                                     //  deUint32                    viewFormatCount;
 -                                      &dsFormat,                                                                                                      //  const VkFormat*             pViewFormats;
 -                              }
 +                                      {
 +                                              VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,            //  VkStructureType             sType;
 +                                              DE_NULL,                                                                                                        //  const void*                 pNext;
 +                                              (VkImageCreateFlags)0u,                                                                         //  VkImageCreateFlags  flags;
 +                                              cbUsage,                                                                                                        //  VkImageUsageFlags   usage;
 +                                              m_data.framebufferDim.width,                                                            //  deUint32                    width;
 +                                              m_data.framebufferDim.height,                                                           //  deUint32                    height;
 +                                              m_data.numColorLayers,                                                                          //  deUint32                    layerCount;
 +                                              0u,                                                                                                                     //  deUint32                    viewFormatCount;
 +                                              DE_NULL                                                                                                         //  const VkFormat*             pViewFormats;
 +                                      }
                                );
 +                              if (m_data.useAttachment())
 +                                      framebufferAttachmentImageInfo.push_back(
 +                                      {
 +                                              VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,            //  VkStructureType             sType;
 +                                              DE_NULL,                                                                                                        //  const void*                 pNext;
 +                                              (VkImageCreateFlags)0u,                                                                         //  VkImageCreateFlags  flags;
 +                                              srUsage,                                                                                                        //  VkImageUsageFlags   usage;
 +                                              srWidth,                                                                                                        //  deUint32                    width;
 +                                              srHeight,                                                                                                       //  deUint32                    height;
 +                                              numSRLayers,                                                                                            //  deUint32                    layerCount;
 +                                              0u,                                                                                                                     //  deUint32                    viewFormatCount;
 +                                              DE_NULL                                                                                                         //  const VkFormat*             pViewFormats;
 +                                      }
 +                                      );
  
 -                      const VkFramebufferAttachmentsCreateInfo                                framebufferAttachmentsCreateInfo        =
 -                      {
 -                              VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO,          //  VkStructureType                                                             sType;
 -                              DE_NULL,                                                                                                        //  const void*                                                                 pNext;
 -                              (deUint32)framebufferAttachmentImageInfo.size(),                        //  deUint32                                                                    attachmentImageInfoCount;
 -                              &framebufferAttachmentImageInfo[0]                                                      //  const VkFramebufferAttachmentImageInfo*             pAttachmentImageInfos;
 -                      };
 +                              if (m_data.useDepthStencil)
 +                                      framebufferAttachmentImageInfo.push_back(
 +                                      {
 +                                              VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,            //  VkStructureType             sType;
 +                                              DE_NULL,                                                                                                        //  const void*                 pNext;
 +                                              (VkImageCreateFlags)0u,                                                                         //  VkImageCreateFlags  flags;
 +                                              dsUsage,                                                                                                        //  VkImageUsageFlags   usage;
 +                                              m_data.framebufferDim.width,                                                            //  deUint32                    width;
 +                                              m_data.framebufferDim.height,                                                           //  deUint32                    height;
 +                                              m_data.numColorLayers,                                                                          //  deUint32                    layerCount;
 +                                              0u,                                                                                                                     //  deUint32                    viewFormatCount;
 +                                              DE_NULL                                                                                                         //  const VkFormat*             pViewFormats;
 +                                      }
 +                                      );
  
 -                      const vk::VkFramebufferCreateInfo       framebufferParams       =
 -                      {
 -                              vk::VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,  // sType
 -                              imagelessFB ? &framebufferAttachmentsCreateInfo : DE_NULL,                              // pNext
 -                              (vk::VkFramebufferCreateFlags)(imagelessFB ? VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT : 0),
 -                              *renderPass,                                                                    // renderPass
 -                              (deUint32)attachments.size(),                                   // attachmentCount
 -                              imagelessFB ? DE_NULL : &attachments[0],                // pAttachments
 -                              m_data.framebufferDim.width,                                    // width
 -                              m_data.framebufferDim.height,                                   // height
 -                              m_data.multiView ? 1 : m_data.numColorLayers,   // layers
 -                      };
 +                              const VkFramebufferAttachmentsCreateInfo                                framebufferAttachmentsCreateInfo        =
 +                              {
 +                                      VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO,          //  VkStructureType                                                             sType;
 +                                      DE_NULL,                                                                                                        //  const void*                                                                 pNext;
 +                                      (deUint32)framebufferAttachmentImageInfo.size(),                        //  deUint32                                                                    attachmentImageInfoCount;
 +                                      &framebufferAttachmentImageInfo[0]                                                      //  const VkFramebufferAttachmentImageInfo*             pAttachmentImageInfos;
 +                              };
 +
 +                              const vk::VkFramebufferCreateInfo       framebufferParams       =
 +                              {
 +                                      vk::VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,  // sType
 +                                      imagelessFB ? &framebufferAttachmentsCreateInfo : DE_NULL,                              // pNext
 +                                      (vk::VkFramebufferCreateFlags)(imagelessFB ? VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT : 0),
 +                                      *renderPass,                                                                    // renderPass
 +                                      (deUint32)attachments.size(),                                   // attachmentCount
 +                                      imagelessFB ? DE_NULL : &attachments[0],                // pAttachments
 +                                      m_data.framebufferDim.width,                                    // width
 +                                      m_data.framebufferDim.height,                                   // height
 +                                      m_data.multiView ? 1 : m_data.numColorLayers,   // layers
 +                              };
  
 -                      framebuffer = createFramebuffer(vk, device, &framebufferParams);
 +                              framebuffer = createFramebuffer(vk, device, &framebufferParams);
 +                      }
  
                        const VkVertexInputBindingDescription           vertexBinding =
                        {
@@@ -263,42 -261,40 +263,43 @@@ protected
        typedef de::SharedPtr<Unique<VkPipeline> >              PipelineSp;
        typedef de::SharedPtr<Unique<VkShaderModule> >  ShaderModuleSP;
  
 -      virtual tcu::TestStatus                 iterate                                 (void);
 -      virtual void                                    beforeRenderPass                (void);
 -      virtual void                                    afterRenderPass                 (void);
 -      virtual void                                    bindResources                   (void) {}
 -      virtual void                                    draw                                    (const deUint32                 subpassCount,
 -                                                                                                                       VkRenderPass                   renderPass,
 -                                                                                                                       VkFramebuffer                  frameBuffer,
 -                                                                                                                       vector<PipelineSp>&    pipelines);
 -      virtual void                                    createVertexData                (void);
 -      TestParameters                                  fillMissingParameters   (const TestParameters&  parameters);
 -      void                                                    createVertexBuffer              (void);
 -      void                                                    createMultiViewDevices  (void);
 -      void                                                    createCommandBuffer             (void);
 -      void                                                    madeShaderModule                (map<VkShaderStageFlagBits,ShaderModuleSP>& shaderModule, vector<VkPipelineShaderStageCreateInfo>& shaderStageParams);
 -      Move<VkPipeline>                                makeGraphicsPipeline    (const VkRenderPass                                                     renderPass,
 -                                                                                                                       const VkPipelineLayout                                         pipelineLayout,
 -                                                                                                                       const deUint32                                                         pipelineShaderStageCount,
 -                                                                                                                       const VkPipelineShaderStageCreateInfo*         pipelineShaderStageCreate,
 -                                                                                                                       const deUint32                                                         subpass,
 -                                                                                                                       const VkVertexInputRate                                        vertexInputRate = VK_VERTEX_INPUT_RATE_VERTEX,
 -                                                                                                                       const bool                                                                     useDepthTest = false,
 -                                                                                                                       const bool                                                                     useStencilTest = false);
 -      void                                                    readImage                               (VkImage image, const tcu::PixelBufferAccess& dst);
 -      bool                                                    checkImage                              (tcu::ConstPixelBufferAccess& dst);
 -      MovePtr<tcu::Texture2DArray>    imageData                               (void);
 -      const tcu::Vec4                                 getQuarterRefColor              (const deUint32 quarterNdx, const int colorNdx, const int layerNdx, const bool background = true, const deUint32 subpassNdx = 0u);
 -      void                                                    appendVertex                    (const tcu::Vec4& coord, const tcu::Vec4& color);
 -      void                                                    setPoint                                (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& pointColor, const int pointSize, const int layerNdx, const deUint32 quarter);
 -      void                                                    fillTriangle                    (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter);
 -      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;
 +      virtual tcu::TestStatus                                 iterate                                 (void);
-       virtual void                                                    beforeDraw                              (void);
-       virtual void                                                    afterDraw                               (void);
++      virtual void                                                    beforeRenderPass                (void);
++      virtual void                                                    afterRenderPass                 (void);
++      virtual void                                                    bindResources                   (void) {}
 +      virtual void                                                    draw                                    (const deUint32                 subpassCount,
 +                                                                                                                                       VkRenderPass                   renderPass,
 +                                                                                                                                       VkFramebuffer                  frameBuffer,
 +                                                                                                                                       vector<PipelineSp>&    pipelines);
 +      virtual void                                                    createVertexData                (void);
 +      virtual MovePtr<tcu::Texture2DArray>    imageData                               (void) const;
 +      TestParameters                                                  fillMissingParameters   (const TestParameters&  parameters);
 +      void                                                                    createVertexBuffer              (void);
 +      void                                                                    createMultiViewDevices  (void);
 +      void                                                                    createCommandBuffer             (void);
 +      void                                                                    madeShaderModule                (map<VkShaderStageFlagBits,ShaderModuleSP>& shaderModule, vector<VkPipelineShaderStageCreateInfo>& shaderStageParams);
 +      Move<VkPipeline>                                                makeGraphicsPipeline    (const VkRenderPass                                                     renderPass,
 +                                                                                                                                       const VkPipelineLayout                                         pipelineLayout,
 +                                                                                                                                       const deUint32                                                         pipelineShaderStageCount,
 +                                                                                                                                       const VkPipelineShaderStageCreateInfo*         pipelineShaderStageCreate,
 +                                                                                                                                       const deUint32                                                         subpass,
 +                                                                                                                                       const VkVertexInputRate                                        vertexInputRate = VK_VERTEX_INPUT_RATE_VERTEX,
 +                                                                                                                                       const bool                                                                     useDepthTest = false,
 +                                                                                                                                       const bool                                                                     useStencilTest = false,
 +                                                                                                                                       const float                                                            minDepth = 0.0f,
 +                                                                                                                                       const float                                                            maxDepth = 1.0f,
 +                                                                                                                                       const VkFormat                                                         dsFormat = VK_FORMAT_UNDEFINED);
 +      void                                                                    readImage                               (VkImage image, const tcu::PixelBufferAccess& dst);
 +      bool                                                                    checkImage                              (tcu::ConstPixelBufferAccess& dst);
 +      const tcu::Vec4                                                 getQuarterRefColor              (const deUint32 quarterNdx, const int colorNdx, const int layerNdx, const bool background = true, const deUint32 subpassNdx = 0u) const;
 +      void                                                                    appendVertex                    (const tcu::Vec4& coord, const tcu::Vec4& color);
 +      void                                                                    setPoint                                (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& pointColor, const int pointSize, const int layerNdx, const deUint32 quarter) const;
 +      void                                                                    fillTriangle                    (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter) const;
 +      void                                                                    fillLayer                               (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx) const;
 +      void                                                                    fillQuarter                             (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter, const deUint32 subpassNdx) const;
 +
        const TestParameters                    m_parameters;
 +      const bool                                              m_useDynamicRendering;
        const int                                               m_seed;
        const deUint32                                  m_squareCount;
        Move<VkDevice>                                  m_logicalDevice;
@@@ -444,47 -436,32 +445,49 @@@ void MultiViewRenderTestInstance::draw 
        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();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-       if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDEXED)
-               m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+               if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDEXED)
+                       m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
+               bindResources();
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
                for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
                        else
                                m_device->cmdDraw(*m_cmdBuffer, 4u, 1u, (drawNdx + subpassNdx % m_squareCount) * 4u, 0u);
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -1792,56 -1732,35 +1800,56 @@@ void MultiViewInstancedTestInstance::dr
  
        beginCommandBuffer(*m_device, *m_cmdBuffer);
  
-       beforeDraw();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
                m_device->cmdDraw(*m_cmdBuffer, 4u, drawCountPerSubpass, 0u, subpassNdx % m_squareCount);
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -1883,57 -1802,36 +1891,57 @@@ void MultiViewInputRateInstanceTestInst
  
        beginCommandBuffer(*m_device, *m_cmdBuffer);
  
-       beforeDraw();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
                for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
                        m_device->cmdDraw(*m_cmdBuffer, 4u, 4u, 0u, 0u);
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -2030,47 -1928,30 +2038,47 @@@ void MultiViewDrawIndirectTestInstance:
                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();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-       if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDIRECT_INDEXED)
-               m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+               if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDIRECT_INDEXED)
+                       m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
                if (m_hasMultiDrawIndirect)
                        }
                }
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -2130,27 -2008,23 +2138,25 @@@ void MultiViewClearAttachmentsTestInsta
        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();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
                VkClearAttachment       clearAttachment =
                        1u,                     // deUint32     layerCount
                };
  
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                m_device->cmdClearAttachments(*m_cmdBuffer, 1u, &clearAttachment, 1u, &clearRect);
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
                for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
                clearAttachment.clearValue = makeClearValueColor(tcu::Vec4(0.0f, 0.0f, 1.0f, 1.0f));
                m_device->cmdClearAttachments(*m_cmdBuffer, 1u, &clearAttachment, 1u, &clearRect);
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -2253,22 -2110,19 +2260,22 @@@ void MultiViewSecondaryCommandBufferTes
  
        beginCommandBuffer(*m_device, *m_cmdBuffer);
  
-       beforeDraw();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderingType);
 +      }
  
        //Create secondary buffer
        const VkCommandBufferAllocateInfo       cmdBufferAllocateInfo   =
                VK_CHECK(m_device->endCommandBuffer(cmdBufferSecondary.back().get()->get()));
  
                m_device->cmdExecuteCommands(*m_cmdBuffer, 1u, &cmdBufferSecondary.back().get()->get());
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -2420,59 -2222,39 +2427,59 @@@ void MultiViewPointSizeTestInstance::dr
        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();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
                        m_device->cmdDraw(*m_cmdBuffer, 1u, 1u, drawNdx + subpassNdx % m_squareCount, 0u);
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -2598,59 -2376,39 +2605,59 @@@ void MultiViewMultsampleTestInstance::d
                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();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
                        m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        m_device->cmdResolveImage(*m_cmdBuffer, m_colorAttachment->getImage(), VK_IMAGE_LAYOUT_GENERAL, m_resolveAttachment->getImage(), VK_IMAGE_LAYOUT_GENERAL, 1u, &imageResolveRegion);
  
@@@ -2906,23 -2667,8 +2913,21 @@@ void MultiViewQueriesTestInstance::dra
        m_device->cmdResetQueryPool(*m_cmdBuffer, *timestampStartQueryPool, queryStartIndex, queryCountersNumber);
        m_device->cmdResetQueryPool(*m_cmdBuffer, *timestampEndQueryPool, queryStartIndex, queryCountersNumber);
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
        m_occlusionExpectedValues.reserve(queryCountersNumber);
        m_counterSeriesStart.reserve(queryCountersNumber);
        m_counterSeriesEnd.reserve(queryCountersNumber);
        {
                deUint32        queryCountersToUse      = getUsedViewsCount(subpassNdx);
  
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
 +              if (m_useDynamicRendering)
 +              {
 +                      beginRendering(
 +                              *m_device,
 +                              *m_cmdBuffer,
 +                              m_colorAttachment->getImageView(),
 +                              renderArea,
 +                              renderPassClearValue,
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 +                              (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
 +                              0u,
 +                              m_parameters.extent.depth,
 +                              m_parameters.viewMasks[subpassNdx]);
 +              }
 +
                for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
                {
                        const deUint32 primitiveNumber  = drawNdx + subpassNdx % m_squareCount;
  
        DE_ASSERT(queryStartIndex == queryCountersNumber);
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -3118,22 -2851,9 +3124,22 @@@ void MultiViewReadbackTestInstance::dra
        beginCommandBuffer(*m_device, *m_cmdBuffer);
  
        if (clearPass)
-               beforeDraw();
+               beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
                        }
                }
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
        if (!clearPass)
-               afterDraw();
+               afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -3217,23 -2908,20 +3223,23 @@@ void MultiViewReadbackTestInstance::cle
  class MultiViewDepthStencilTestInstance : public MultiViewRenderTestInstance
  {
  public:
 -                                              MultiViewDepthStencilTestInstance       (Context& context, const TestParameters& parameters);
 +                                                                      MultiViewDepthStencilTestInstance       (Context& context, const TestParameters& parameters);
  protected:
 -      tcu::TestStatus         iterate                                                         (void);
 -      void                            createVertexData                                        (void);
 -
 -      void                            draw                                                            (const deUint32                                 subpassCount,
 -                                                                                                                       VkRenderPass                                   renderPass,
 -                                                                                                                       VkFramebuffer                                  frameBuffer,
 -                                                                                                                       vector<PipelineSp>&                    pipelines);
 -      void                            beforeRenderPass                                        (void);
 -      void                            afterRenderPass                                         (void);
 -      vector<VkImageView>     makeAttachmentsVector                           (void);
 -      void                            readImage                                                       (VkImage                                                image,
 -                                                                                                                       const tcu::PixelBufferAccess&  dst);
 +      tcu::TestStatus                                 iterate                                                         (void) override;
 +      void                                                    createVertexData                                        (void) override;
 +
 +      void                                                    draw                                                            (const deUint32                                 subpassCount,
 +                                                                                                                                               VkRenderPass                                   renderPass,
 +                                                                                                                                               VkFramebuffer                                  frameBuffer,
 +                                                                                                                                               vector<PipelineSp>&                    pipelines) override;
-       void                                                    beforeDraw                                                      (void) override;
-       void                                                    afterDraw                                                       (void) override;
++      void                                                    beforeRenderPass                                                        (void) override;
++      void                                                    afterRenderPass                                                 (void) override;
 +      vector<VkImageView>                             makeAttachmentsVector                           (void);
 +      MovePtr<tcu::Texture2DArray>    imageData                                                       (void) const override;
 +      void                                                    readImage                                                       (VkImage                                                image,
 +                                                                                                                                               const tcu::PixelBufferAccess&  dst);
 +      vector<tcu::Vec2>                               getDepthRanges                                          (void) const;
 +
  private:
        VkFormat                                                m_dsFormat;
        de::SharedPtr<ImageAttachment>  m_dsAttachment;
@@@ -3648,91 -3234,37 +3654,90 @@@ void MultiViewDepthStencilTestInstance:
  
        beginCommandBuffer(*m_device, *m_cmdBuffer);
  
-       beforeDraw();
+       beforeRenderPass();
  
 -      cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +      {
 +              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;
 +              };
 +              cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
 +      }
  
-       m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
        for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
        {
                deUint32 firstVertexOffset = (subpassNdx < 4) ? 0u : m_squareCount * vertexPerPrimitive;
  
+               m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
                m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
  
 +              if (m_useDynamicRendering)
 +              {
 +                      VkRenderingAttachmentInfoKHR colorAttachment
 +                      {
 +                              vk::VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR,    // VkStructureType                                              sType;
 +                              DE_NULL,                                                                                                // const void*                                                  pNext;
 +                              m_colorAttachment->getImageView(),                                              // VkImageView                                                  imageView;
 +                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                               // VkImageLayout                                                imageLayout;
 +                              VK_RESOLVE_MODE_NONE,                                                                   // VkResolveModeFlagBits                                resolveMode;
 +                              DE_NULL,                                                                                                // VkImageView                                                  resolveImageView;
 +                              VK_IMAGE_LAYOUT_UNDEFINED,                                                              // VkImageLayout                                                resolveImageLayout;
 +                              VK_ATTACHMENT_LOAD_OP_LOAD,                                                             // VkAttachmentLoadOp                                   loadOp;
 +                              vk::VK_ATTACHMENT_STORE_OP_STORE,                                               // VkAttachmentStoreOp                                  storeOp;
 +                              renderPassClearValue                                                                    // VkClearValue                                                 clearValue;
 +                      };
 +
 +                      VkRenderingAttachmentInfoKHR dsAttachment
 +                      {
 +                              VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR,                // VkStructureType                                              sType;
 +                              DE_NULL,                                                                                                // const void*                                                  pNext;
 +                              m_dsAttachment->getImageView(),                                                 // VkImageView                                                  imageView;
 +                              VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,               // VkImageLayout                                                imageLayout;
 +                              VK_RESOLVE_MODE_NONE,                                                                   // VkResolveModeFlagBits                                resolveMode;
 +                              DE_NULL,                                                                                                // VkImageView                                                  resolveImageView;
 +                              VK_IMAGE_LAYOUT_UNDEFINED,                                                              // VkImageLayout                                                resolveImageLayout;
 +                              VK_ATTACHMENT_LOAD_OP_LOAD,                                                             // VkAttachmentLoadOp                                   loadOp;
 +                              VK_ATTACHMENT_STORE_OP_STORE,                                                   // VkAttachmentStoreOp                                  storeOp;
 +                              makeClearValueDepthStencil(0.0f, 0)                                             // VkClearValue                                                 clearValue;
 +                      };
 +
 +                      vk::VkRenderingInfoKHR renderingInfo
 +                      {
 +                              vk::VK_STRUCTURE_TYPE_RENDERING_INFO_KHR,
 +                              DE_NULL,
 +                              0u,                                                                                                             // VkRenderingFlagsKHR                                  flags;
 +                              renderArea,                                                                                             // VkRect2D                                                             renderArea;
 +                              m_parameters.extent.depth,                                                              // deUint32                                                             layerCount;
 +                              m_parameters.viewMasks[subpassNdx],                                             // deUint32                                                             viewMask;
 +                              1u,                                                                                                             // deUint32                                                             colorAttachmentCount;
 +                              &colorAttachment,                                                                               // const VkRenderingAttachmentInfoKHR*  pColorAttachments;
 +                              (m_depthTest ? &dsAttachment : DE_NULL),                                // const VkRenderingAttachmentInfoKHR*  pDepthAttachment;
 +                              (m_stencilTest ? &dsAttachment : DE_NULL),                              // const VkRenderingAttachmentInfoKHR*  pStencilAttachment;
 +                      };
 +
 +                      m_device->cmdBeginRenderingKHR(*m_cmdBuffer, &renderingInfo);
 +              }
 +
                for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
                        m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, firstVertexOffset + (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
  
 -              if (subpassNdx < subpassCount - 1u)
 -                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
 +              if (m_useDynamicRendering)
 +                      endRendering(*m_device, *m_cmdBuffer);
 +              else if (subpassNdx < subpassCount - 1u)
 +                      cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
        }
  
 -      cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
 +      if (!m_useDynamicRendering)
 +              cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
  
-       afterDraw();
+       afterRenderPass();
  
        VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
        submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
@@@ -274,6 -274,7 +274,8 @@@ Move<VkRenderPass> makeRenderPass (cons
        vector <SubpassDep>                                                     subpassDependencies;
        for(deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx)
        {
++              const auto dependencyFlags = (subpassNdx == subpassCount - 1u) ? (VK_DEPENDENCY_BY_REGION_BIT | VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR) : VK_DEPENDENCY_VIEW_LOCAL_BIT;
++
                const SubpassDep                                                subpassDependency                       //  VkSubpassDependency                                                                                 ||  VkSubpassDependency2KHR
                (
                                                                                                                                                        //                                                                                                                              ||      VkStructureType                                         sType;
@@@ -472,6 -472,6 +472,8 @@@ Move<VkRenderPass> makeRenderPassWithAt
        vector <SubpassDep>                                                     subpassDependencies;
        for(deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx)
        {
++              const auto dependencyFlags = (subpassNdx == subpassCount - 1u) ? (VK_DEPENDENCY_BY_REGION_BIT | VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR) : VK_DEPENDENCY_VIEW_LOCAL_BIT;
++
                const SubpassDep                                                subpassDependency                       //  VkSubpassDependency                                                                                 ||  VkSubpassDependency2KHR
                (
                                                                                                                                                        //                                                                                                                              ||      VkStructureType                                         sType;