From e4fd46b93d76dec4a28f8579d65cdfd2951f4185 Mon Sep 17 00:00:00 2001 From: Boris Zanin Date: Tue, 20 Mar 2018 15:54:56 +0100 Subject: [PATCH] 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 --- AndroidGen.mk | 1 + android/cts/master/vk-master.txt | 91 +++++ .../modules/vulkan/multiview/CMakeLists.txt | 2 + .../multiview/vktMultiViewRenderPassUtil.cpp | 370 +++++++++++++++++++ .../multiview/vktMultiViewRenderPassUtil.hpp | 257 +++++++++++++ .../vulkan/multiview/vktMultiViewRenderTests.cpp | 272 ++++++++++---- .../vulkan/multiview/vktMultiViewRenderUtil.cpp | 407 +++++++++++++-------- .../vulkan/multiview/vktMultiViewRenderUtil.hpp | 5 + .../mustpass/1.1.1/vk-default-no-waivers.txt | 91 +++++ external/vulkancts/mustpass/1.1.1/vk-default.txt | 91 +++++ 10 files changed, 1356 insertions(+), 231 deletions(-) create mode 100644 external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.cpp create mode 100644 external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.hpp diff --git a/AndroidGen.mk b/AndroidGen.mk index d5ff67f..2458539 100644 --- a/AndroidGen.mk +++ b/AndroidGen.mk @@ -136,6 +136,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 daf0bef..4477ccc 100755 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -284399,6 +284399,97 @@ dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 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.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.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.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.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.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.1_2_4_8_16_32 +dEQP-VK.multiview.renderpass2.draw_indirect.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.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.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.1_2_4_8_16_32 +dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count +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.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.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.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.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 4f2224b..0502f6b 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" @@ -75,13 +76,109 @@ enum TestType TEST_TYPE_LAST }; +enum RenderPassType +{ + RENDERPASS_TYPE_LEGACY = 0, + RENDERPASS_TYPE_RENDERPASS2, +}; + struct TestParameters { VkExtent3D extent; vector viewMasks; TestType viewIndex; + RenderPassType renderPassType; }; +vk::Move makeRenderPass (const DeviceInterface& vk, + const VkDevice device, + const VkFormat colorFormat, + const vector& viewMasks, + RenderPassType renderPassType) +{ + switch (renderPassType) + { + case RENDERPASS_TYPE_LEGACY: + return MultiView::makeRenderPass(vk, device, colorFormat, viewMasks); + case RENDERPASS_TYPE_RENDERPASS2: + return MultiView::makeRenderPass(vk, device, colorFormat, viewMasks); + 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"); + } +} + +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: @@ -153,6 +250,7 @@ protected: bool checkImage (tcu::ConstPixelBufferAccess& dst); MovePtr imageData (void); + const bool m_extensionSupported; const TestParameters m_parameters; VkFormat m_colorFormat; const deUint32 m_squareCount; @@ -171,11 +269,12 @@ protected: }; MultiViewRenderTestInstance::MultiViewRenderTestInstance (Context& context, const TestParameters& parameters) - : TestInstance (context) - , m_parameters (fillMissingParameters(parameters)) - , m_colorFormat (VK_FORMAT_R8G8B8A8_UNORM) - , m_squareCount (4u) - ,m_queueFamilyIndex (0u) + : TestInstance (context) + , m_extensionSupported ((parameters.renderPassType == RENDERPASS_TYPE_RENDERPASS2) && context.requireDeviceExtension("VK_KHR_create_renderpass2")) + , m_parameters (fillMissingParameters(parameters)) + , m_colorFormat (VK_FORMAT_R8G8B8A8_UNORM) + , m_squareCount (4u) + , m_queueFamilyIndex (0u) { if (!isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_multiview")) throw tcu::NotSupportedError("VK_KHR_multiview is not supported"); @@ -191,7 +290,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_colorFormat, m_parameters.viewMasks)); + Unique renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_colorFormat, m_parameters.viewMasks, m_parameters.renderPassType)); vector attachments; attachments.push_back(m_colorAttachment->getImageView()); @@ -286,7 +385,7 @@ void MultiViewRenderTestInstance::draw (const deUint32 subpassCount,VkRenderPass beforeDraw(); - m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType); m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, 1u, &(*m_vertexBuffer), &vertexBufferOffset); @@ -298,10 +397,10 @@ void MultiViewRenderTestInstance::draw (const deUint32 subpassCount,VkRenderPass 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); } - m_device->cmdEndRenderPass(*m_cmdBuffer); + cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType); afterDraw(); @@ -472,6 +571,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; @@ -1026,7 +1129,7 @@ tcu::TestStatus MultiViewAttachmentsTestInstance::iterate (void) m_inputAttachment = de::SharedPtr(new ImageAttachment(*m_logicalDevice, *m_device, *m_allocator, m_parameters.extent, m_colorFormat)); // FrameBuffer & renderPass - Unique renderPass (makeRenderPassWithAttachments(*m_device, *m_logicalDevice, m_colorFormat, m_parameters.viewMasks)); + Unique renderPass (makeRenderPassWithAttachments(*m_device, *m_logicalDevice, m_colorFormat, m_parameters.viewMasks, m_parameters.renderPassType)); vector attachments; attachments.push_back(m_colorAttachment->getImageView()); @@ -1248,13 +1351,12 @@ void MultiViewInstancedTestInstance::createVertexData (void) m_data.push_back(VertexData(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 VkDeviceSize vertexBufferOffset = 0u; const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u; - const VkRenderPassBeginInfo renderPassBeginInfo = { VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType; @@ -1270,7 +1372,7 @@ void MultiViewInstancedTestInstance::draw (const deUint32 subpassCount,VkRenderP beforeDraw(); - m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType); m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, 1u, &(*m_vertexBuffer), &vertexBufferOffset); @@ -1281,10 +1383,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); } - m_device->cmdEndRenderPass(*m_cmdBuffer); + cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType); afterDraw(); @@ -1298,6 +1400,7 @@ public: MultiViewInputRateInstanceTestInstance (Context& context, const TestParameters& parameters); protected: void createVertexData (void); + void draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, @@ -1324,13 +1427,12 @@ void MultiViewInputRateInstanceTestInstance::createVertexData (void) m_data.push_back(VertexData(tcu::Vec4( 0.0f, 0.0f, 1.0f, 1.0f), color)); } -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 VkDeviceSize vertexBufferOffset = 0u; const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u; - const VkRenderPassBeginInfo renderPassBeginInfo = { VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType; @@ -1346,7 +1448,7 @@ void MultiViewInputRateInstanceTestInstance::draw (const deUint32 subpassCount,V beforeDraw(); - m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType); m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, 1u, &(*m_vertexBuffer), &vertexBufferOffset); @@ -1358,10 +1460,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); } - m_device->cmdEndRenderPass(*m_cmdBuffer); + cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType); afterDraw(); @@ -1442,7 +1544,7 @@ void MultiViewIDrawIndirectTestInstance::draw (const deUint32 subpassCount,VkRen beforeDraw(); - m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType); m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, 1u, &(*m_vertexBuffer), &vertexBufferOffset); @@ -1463,10 +1565,10 @@ void MultiViewIDrawIndirectTestInstance::draw (const deUint32 subpassCount,VkRen } 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); } - m_device->cmdEndRenderPass(*m_cmdBuffer); + cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType); afterDraw(); @@ -1490,7 +1592,7 @@ 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)); @@ -1512,7 +1614,7 @@ void MultiViewClearAttachmentsTestInstance::draw (const deUint32 subpassCount,Vk beforeDraw(); - m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType); m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, 1u, &(*m_vertexBuffer), &vertexBufferOffset); @@ -1561,10 +1663,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); } - m_device->cmdEndRenderPass(*m_cmdBuffer); + cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType); afterDraw(); @@ -1597,7 +1699,6 @@ void MultiViewSecondaryCommandBufferTestInstance::draw (const deUint32 subpassCo const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f)); const VkDeviceSize vertexBufferOffset = 0u; const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u; - const VkRenderPassBeginInfo renderPassBeginInfo = { VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType; @@ -1613,7 +1714,7 @@ void MultiViewSecondaryCommandBufferTestInstance::draw (const deUint32 subpassCo beforeDraw(); - m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS); + cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType); //Create secondary buffer const VkCommandBufferAllocateInfo cmdBufferAllocateInfo = @@ -1641,10 +1742,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); } - m_device->cmdEndRenderPass(*m_cmdBuffer); + cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType); afterDraw(); @@ -1868,11 +1969,23 @@ private: }; } //anonymous +static std::string createViewMasksName(const std::vector& viewMasks) +{ + std::ostringstream masks; + + for (size_t ndx = 0u; ndx < viewMasks.size(); ++ndx) + { + masks << viewMasks[ndx]; + if (viewMasks.size() - 1 != ndx) + masks << "_"; + } + + return masks.str(); +} + void multiViewRenderCreateTests (tcu::TestCaseGroup* group) { - tcu::TestContext& testCtx = group->getTestContext(); const deUint32 testCaseCount = 6u; - MovePtr groupViewIndex (new tcu::TestCaseGroup(testCtx, "index", "ViewIndex rendering tests.")); const string shaderName[TEST_TYPE_LAST] = { "masks", @@ -1925,59 +2038,66 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group) for (deUint32 mask = 1u; mask <= maxViewMask; mask = mask << 1u) viewMasks[5].push_back(mask); - 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(), "")); - for (deUint32 testCaseNdx = 0u; testCaseNdx < testCaseCount; ++testCaseNdx) + 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.")); + + for (int testTypeNdx = TEST_TYPE_VIEW_MASK; testTypeNdx < TEST_TYPE_LAST; ++testTypeNdx) { - const TestParameters parameters = {extent3D[testCaseNdx], viewMasks[testCaseNdx], (TestType)testTypeNdx}; - std::ostringstream masks; - const deUint32 viewMaksSize = static_cast(viewMasks[testCaseNdx].size()); + MovePtr groupShader (new tcu::TestCaseGroup(testCtx, shaderName[testTypeNdx].c_str(), "")); + const TestType testType = static_cast(testTypeNdx); - for (deUint32 ndx = 0u; ndx < viewMaksSize; ++ndx) + for (deUint32 testCaseNdx = 0u; testCaseNdx < testCaseCount; ++testCaseNdx) { - masks<addChild(new MultiViewRenderTestsCase(testCtx, testName.c_str(), "", parameters)); } - groupShader->addChild(new MultiViewRenderTestsCase(testCtx, masks.str().c_str(), "", parameters)); - } - // maxMultiviewViewCount case - { - const VkExtent3D incompleteExtent3D = { 16u, 16u, 0u }; - const vector dummyMasks; - const TestParameters parameters = { incompleteExtent3D, dummyMasks, (TestType)testTypeNdx }; + // maxMultiviewViewCount case + { + const VkExtent3D incompleteExtent3D = { 16u, 16u, 0u }; + const vector dummyMasks; + const TestParameters parameters = { incompleteExtent3D, dummyMasks, testType, renderPassType }; - groupShader->addChild(new MultiViewRenderTestsCase(testCtx, "max_multi_view_view_count", "", parameters)); + 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_CLEAR_ATTACHMENTS: + case TEST_TYPE_SECONDARY_CMD_BUFFER: + case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY: + 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 (testTypeNdx) - { - 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_CLEAR_ATTACHMENTS: - case TEST_TYPE_SECONDARY_CMD_BUFFER: - case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY: - 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 00581b1..a78c797 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" @@ -184,96 +185,143 @@ 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 deUint32 subpassCount = static_cast(viewMasks.size()); - const VkAttachmentDescription colorAttachmentDescription = + 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 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 depthAttachmentReference // VkAttachmentReference || VkAttachmentReference2KHR + ( + // || VkStructureType sType; + DE_NULL, // || const void* pNext; + VK_ATTACHMENT_UNUSED, // deUint32 attachment; || deUint32 attachment; + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // 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) { - (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 VkAttachmentReference colorAttachmentReference = - { - 0u, // deUint32 attachment; - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // 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; - 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; - 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; - 1u, // deUint32 attachmentCount; - &colorAttachmentDescription, // 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; + 1u, // deUint32 attachmentCount; || deUint32 attachmentCount; + &colorAttachmentDescription, // 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 makeRenderPass + (const DeviceInterface& vk, + const VkDevice device, + const VkFormat colorFormat, + const vector& viewMasks); + +// Instantiate function for renderpass2 structures +template +Move makeRenderPass + (const DeviceInterface& vk, + const VkDevice device, + const VkFormat colorFormat, + const vector& viewMasks); + +template Move makeRenderPassWithAttachments (const DeviceInterface& vk, const VkDevice device, const VkFormat colorFormat, @@ -281,70 +329,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 = - { - 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 = + 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) { - (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; @@ -355,39 +428,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 beginCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer commandBuffer) { const VkCommandBufferBeginInfo info = diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp index 931c88a..7fdbf9a 100644 --- a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp +++ b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp @@ -39,8 +39,13 @@ 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); + +template vk::Move makeRenderPass (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector& viewMasks); + +template vk::Move makeRenderPassWithAttachments (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector& viewMasks); + void beginCommandBuffer (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer); 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 dstStageMas = vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT); diff --git a/external/vulkancts/mustpass/1.1.1/vk-default-no-waivers.txt b/external/vulkancts/mustpass/1.1.1/vk-default-no-waivers.txt index e23e024..41b77df 100644 --- a/external/vulkancts/mustpass/1.1.1/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/1.1.1/vk-default-no-waivers.txt @@ -284722,6 +284722,97 @@ dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 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.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.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.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.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.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.1_2_4_8_16_32 +dEQP-VK.multiview.renderpass2.draw_indirect.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.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.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.1_2_4_8_16_32 +dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count +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.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.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.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.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.1/vk-default.txt b/external/vulkancts/mustpass/1.1.1/vk-default.txt index 37d4317..47f272e 100644 --- a/external/vulkancts/mustpass/1.1.1/vk-default.txt +++ b/external/vulkancts/mustpass/1.1.1/vk-default.txt @@ -284683,6 +284683,97 @@ dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 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.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.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.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.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.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.1_2_4_8_16_32 +dEQP-VK.multiview.renderpass2.draw_indirect.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.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.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.1_2_4_8_16_32 +dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count +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.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.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.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.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 -- 2.7.4