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